diff --git a/documentation.go b/documentation.go index b94cc74..0733d85 100644 --- a/documentation.go +++ b/documentation.go @@ -8,9 +8,17 @@ import ( ) type DocEndpointHttpProtocol map[string]DocEndpoint +type DocEndpointProduces string type DocEndpointParameterIn string type DocEndpointType string +const ( + DocEndpointProducesJson DocEndpointProduces = "application/json" + DocEndpointProducesXml DocEndpointProduces = "application/xml" + DocEndpointProducesYaml DocEndpointProduces = "application/yaml" + DocEndpointProducesText DocEndpointProduces = "text/plain" +) + const ( DocEndpointParameterInQuery DocEndpointParameterIn = "query" DocEndpointParameterInPath DocEndpointParameterIn = "path" @@ -49,24 +57,28 @@ type DocEndpoint struct { OperationId string `json:"operationId"` Responses map[int]DocEndpointResponse `json:"responses"` Parameters []DocEndpointParameter `json:"parameters,omitempty"` + Produces []DocEndpointProduces `json:"produces,omitempty"` Definitions map[string]DocEndpointDefinition `json:"-"` ParsedTags []string `json:"tags,omitempty"` } type DocEndpointResponse struct { - Description string `json:"description"` - Schema map[string]string `json:"schema,omitempty"` + Description string `json:"description"` + Schema DocEndpointSchema `json:"schema,omitempty"` + Headers map[string]DocEndpointParameter `json:"headers,omitempty"` } type DocEndpointParameter struct { - In DocEndpointParameterIn `json:"in,omitempty"` - Name string `json:"name,omitempty"` - Required bool `json:"required,omitempty"` - Type DocEndpointType `json:"type,omitempty"` - Enum []string `json:"enum,omitempty"` - Format string `json:"format,omitempty"` - Schema map[string]string `json:"schema,omitempty"` + In DocEndpointParameterIn `json:"in,omitempty"` + Name string `json:"name,omitempty"` + Description string `json:"description,omitempty"` + Required bool `json:"required,omitempty"` + Type DocEndpointType `json:"type,omitempty"` + Enum []string `json:"enum,omitempty"` + Format string `json:"format,omitempty"` + Items DocEndpointParameterItem `json:"items,omitempty"` + Schema DocEndpointSchema `json:"schema,omitempty"` } type DocEndpointDefinition struct { @@ -74,6 +86,19 @@ type DocEndpointDefinition struct { Properties map[string]DocEndpointParameter `json:"properties"` } +type DocEndpointParameterItem struct { + Type DocEndpointType `json:"type,omitempty"` + Enum []string `json:"enum,omitempty"` + Format string `json:"format,omitempty"` + Ref string `json:"$ref,omitempty"` +} + +type DocEndpointSchema struct { + Type string `json:"type"` + Ref string `json:"$ref"` + AdditionalProperties bool `json:"additionalProperties,omitempty"` +} + func NewDocApp(title string, version string) DocApp { return DocApp{ Swagger: "2.0", diff --git a/documentation_test.go b/documentation_test.go index 91c9bc9..81f1afe 100644 --- a/documentation_test.go +++ b/documentation_test.go @@ -132,8 +132,8 @@ func Test_AddEndpointToDocs_EndpointDefinitions(t *testing.T) { { In: DocEndpointParameterInBody, Name: "body", - Schema: map[string]string{ - "$ref": "#/definitions/TestObject", + Schema: DocEndpointSchema{ + Ref: "#/definitions/TestObject", }, }, }, @@ -161,8 +161,8 @@ func Test_AddEndpointToDocs_EndpointDefinitions(t *testing.T) { { In: DocEndpointParameterInBody, Name: "body", - Schema: map[string]string{ - "$ref": "#/definitions/TestObject", + Schema: DocEndpointSchema{ + Ref: "#/definitions/TestObject", }, }, }, diff --git a/examples/swagger.go b/examples/swagger.go index e97856e..0c9bc1e 100644 --- a/examples/swagger.go +++ b/examples/swagger.go @@ -56,8 +56,8 @@ func main() { { Name: "body", In: geh.DocEndpointParameterInBody, - Schema: map[string]string{ - "$ref": "#/definitions/TestObject", + Schema: geh.DocEndpointSchema{ + Ref: "#/definitions/TestObject", }, }, },