// only one
syntax = "v1"

// import
import "foo.api"

// import group
import(
    "foo.api"
    "foo/bar.api"
)

// only one
info(
    title: "foo title"
    desc: "foo
desc"
    author: "foo author"
    email: "foo email"
    version: "foo version"
)

// ignore the following duplicate name

type Foo int

// type single
type Foo {
    Bar string
}

type Foo {
    Bar string `json:"bar"`
    Inline
}
// go struct
type Foo struct {
    Bar string `json:"bar"`
}

// type group
type (
    Foo int

    // go struct
    Foo struct {
        Bar string `json:"bar"`
    }

    Foo {
        VString string `json:"vString"`
        VBool bool `json:"vBool"`
        VInt8 int8 `json:"vInt8"`
        VInt16 int16 `json:"vInt16"`
        VInt32 int32 `json:"vInt32"`
        VInt64 int64 `json:"vInt64"`
        VInt int `json:"vInt"`
        VUInt8 uint8 `json:"vUInt8"`
        VUInt16 uint16 `json:"vUInt16"`
        VUInt32 uint32 `json:"vUInt32"`
        VUInt64 uint64 `json:"vUInt64"`
        VFloat32 float32 `json:"vFloat32"`
        VFloat64 float64 `json:"vFloat64"`
        VByte byte `json:"vByte"`
        VRune rune `json:"vRune"`
        VMap map[string]int `json:"vMap"`
        VArray []int `json:"vArray"`
        VStruct Foo `json:"vStruct"`
        VStructPointer *Foo `json:"vStructPointer"`
        VInterface interface{} `json:"vInterface"`
        T time.Time
    }
)

@server(
    jwt: Foo
    group: foo/bar
    anotherKey: anotherValue
)
service example-api {
    @doc(
        summary: "foo1"
    )
    @server(
        handler: fooHandler1
        anotherKey: anotherValue
    )
    post /api/foo1 (SingleExample)

    @doc "foo2"
    @handler fooHandler2
    get /api/foo2 (SingleExample) returns (SingleExample2)

    @handler fooHandler3
    post /api/foo3/:id returns (SingleExample2)

    @handler fooHandler4
    get /api/foo4
}
