-
Notifications
You must be signed in to change notification settings - Fork 17
Expand file tree
/
Copy pathexample_test.go
More file actions
105 lines (87 loc) · 5.21 KB
/
Copy pathexample_test.go
File metadata and controls
105 lines (87 loc) · 5.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package swgen_test
import (
"fmt"
"github.com/lazada/swgen"
)
func ExampleGenerator_GenDocument() {
// PetsRequest defines all params for /pets request
type PetsRequest struct {
Tags []string `schema:"tags" in:"query" required:"-" description:"tags to filter by"`
Limit int32 `schema:"limit" in:"query" required:"-" description:"maximum number of results to return"`
}
// Pet contains information of a pet
type Pet struct {
ID int64 `json:"id"`
Name string `json:"name"`
Tag string `json:"tag"`
}
gen := swgen.NewGenerator()
gen.SetHost("petstore.swagger.io").SetBasePath("/api")
gen.SetInfo("Swagger Petstore (Simple)", "A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification", "http://helloreverb.com/terms/", "2.0")
gen.SetLicense("MIT", "http://opensource.org/licenses/MIT")
gen.SetContact("Swagger API team", "http://swagger.io", "foo@example.com")
gen.AddSecurityDefinition("BasicAuth", swgen.SecurityDef{Type: swgen.SecurityBasicAuth})
pathInf := swgen.PathItemInfo{
Path: "/pets",
Method: "GET",
Title: "findPets",
Description: "Returns all pets from the system that the user has access to",
Tag: "v1",
Deprecated: false,
Security: []string{"BasicAuth"},
}
pathInf.AddExtendedField("x-example", "example")
gen.SetPathItem(
pathInf,
PetsRequest{}, // request object
nil, // body data if any
[]Pet{}, // response object
)
// extended field
gen.AddExtendedField("x-uppercase-version", true)
docData, _ := gen.GenDocument()
fmt.Println(string(docData))
// output:
// {"swagger":"2.0","info":{"title":"Swagger Petstore (Simple)","description":"A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification","termsOfService":"http://helloreverb.com/terms/","contact":{"name":"Swagger API team","url":"http://swagger.io","email":"foo@example.com"},"license":{"name":"MIT","url":"http://opensource.org/licenses/MIT"},"version":"2.0"},"host":"petstore.swagger.io","basePath":"/api","schemes":["http","https"],"paths":{"/pets":{"get":{"tags":["v1"],"summary":"findPets","description":"Returns all pets from the system that the user has access to","parameters":[{"name":"tags","in":"query","type":"array","items":{"type":"string"},"collectionFormat":"multi","description":"tags to filter by"},{"name":"limit","in":"query","type":"integer","format":"int32","description":"maximum number of results to return"}],"responses":{"200":{"description":"request success","schema":{"type":"array","items":{"$ref":"#/definitions/Pet"}}}},"security":[{"BasicAuth":[]}],"x-example":"example"}}},"definitions":{"Pet":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"tag":{"type":"string"}}}},"securityDefinitions":{"BasicAuth":{"type":"basic"}},"x-uppercase-version":true}
}
func ExampleGenerator_GenDocument_jsonrpc() {
const (
// XServiceType is a swagger vendor extension
XServiceType = `x-service-type`
// XAttachVersionToHead is a swagger vendor extension
XAttachVersionToHead = `x-attach-version-to-head`
)
// Pet contains information of a pet
type Pet struct {
ID int64 `json:"id"`
Name string `json:"name"`
Tag string `json:"tag"`
}
gen := swgen.NewGenerator()
gen.SetHost("petstore.swagger.io")
gen.SetBasePath("/rpc") // set JSON-RPC path
gen.SetInfo("Swagger Petstore (Simple)", "A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification", "http://helloreverb.com/terms/", "2.0")
gen.SetLicense("MIT", "http://opensource.org/licenses/MIT")
gen.SetContact("Swagger API team", "http://swagger.io", "foo@example.com")
// set service type is JSON-RPC
gen.AddExtendedField(XServiceType, swgen.ServiceTypeJSONRPC)
gen.AddExtendedField(XAttachVersionToHead, false)
pathInf := swgen.PathItemInfo{
Path: "addPet", // in JSON-RPC, use name of method for Path
Method: "POST",
Title: "Add new Pet",
Description: "Add a new pet to the store",
Tag: "v1",
Deprecated: false,
}
gen.SetPathItem(
pathInf,
nil, // request object
Pet{}, // body data if any
Pet{}, // response object
)
docData, _ := gen.GenDocument()
fmt.Println(string(docData))
// output:
// {"swagger":"2.0","info":{"title":"Swagger Petstore (Simple)","description":"A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification","termsOfService":"http://helloreverb.com/terms/","contact":{"name":"Swagger API team","url":"http://swagger.io","email":"foo@example.com"},"license":{"name":"MIT","url":"http://opensource.org/licenses/MIT"},"version":"2.0"},"host":"petstore.swagger.io","basePath":"/rpc","schemes":["http","https"],"paths":{"addPet":{"post":{"tags":["v1"],"summary":"Add new Pet","description":"Add a new pet to the store","parameters":[{"name":"body","in":"body","schema":{"$ref":"#/definitions/Pet"},"required":true}],"responses":{"200":{"description":"request success","schema":{"$ref":"#/definitions/Pet"}}}}}},"definitions":{"Pet":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"tag":{"type":"string"}}}},"x-attach-version-to-head":false,"x-service-type":"json-rpc"}
}