From 24209aa795ef7ed5380fa86b7e60e787e692e91d Mon Sep 17 00:00:00 2001 From: Bogdan U Date: Sun, 6 Feb 2022 11:44:41 +0200 Subject: [PATCH] fix: breaking change introduced by generation of 2 documents in the same package (#1127) --- example/basic/docs/docs.go | 67 +++++------------------- example/celler/docs/docs.go | 69 +++++-------------------- example/object-map-example/docs/docs.go | 67 +++++------------------- gen/gen.go | 6 +-- gen/gen_test.go | 2 +- 5 files changed, 44 insertions(+), 167 deletions(-) diff --git a/example/basic/docs/docs.go b/example/basic/docs/docs.go index 98c17a25a..ca4085a1f 100644 --- a/example/basic/docs/docs.go +++ b/example/basic/docs/docs.go @@ -1,22 +1,14 @@ -// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Package docs GENERATED BY THE COMMAND ABOVE; DO NOT EDIT // This file was generated by swaggo/swag - package docs -import ( - "bytes" - "encoding/json" - "strings" - "text/template" - - "github.com/swaggo/swag" -) +import "github.com/swaggo/swag" -var doc = `{ +const docTemplate_swagger = `{ "schemes": {{ marshal .Schemes }}, "swagger": "2.0", "info": { - "description": "{{.Description}}", + "description": "{{escape .Description}}", "title": "{{.Title}}", "termsOfService": "http://swagger.io/terms/", "contact": { @@ -262,49 +254,18 @@ var doc = `{ } }` -type swaggerInfo struct { - Version string - Host string - BasePath string - Schemes []string - Title string - Description string -} - // SwaggerInfo holds exported Swagger Info so clients can modify it -var SwaggerInfo = swaggerInfo{ - Version: "1.0", - Host: "petstore.swagger.io", - BasePath: "/v2", - Schemes: []string{}, - Title: "Swagger Example API", - Description: "This is a sample server Petstore server.", -} - -type s struct{} - -func (s *s) ReadDoc() string { - sInfo := SwaggerInfo - sInfo.Description = strings.Replace(sInfo.Description, "\n", "\\n", -1) - - t, err := template.New("swagger_info").Funcs(template.FuncMap{ - "marshal": func(v interface{}) string { - a, _ := json.Marshal(v) - return string(a) - }, - }).Parse(doc) - if err != nil { - return doc - } - - var tpl bytes.Buffer - if err := t.Execute(&tpl, sInfo); err != nil { - return doc - } - - return tpl.String() +var SwaggerInfo = &swag.Spec{ + Version: "1.0", + Host: "petstore.swagger.io", + BasePath: "/v2", + Schemes: []string{}, + Title: "Swagger Example API", + Description: "This is a sample server Petstore server.", + InfoInstanceName: "swagger", + SwaggerTemplate: docTemplate_swagger, } func init() { - swag.Register(swag.Name, &s{}) + swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo) } diff --git a/example/celler/docs/docs.go b/example/celler/docs/docs.go index 1914d1d35..55545d077 100644 --- a/example/celler/docs/docs.go +++ b/example/celler/docs/docs.go @@ -2,16 +2,9 @@ // This file was generated by swaggo/swag package docs -import ( - "bytes" - "encoding/json" - "strings" - "text/template" +import "github.com/swaggo/swag" - "github.com/swaggo/swag" -) - -var doc = `{ +const docTemplate_swagger = `{ "schemes": {{ marshal .Schemes }}, "swagger": "2.0", "info": { @@ -1038,56 +1031,18 @@ var doc = `{ } }` -type swaggerInfo struct { - Version string - Host string - BasePath string - Schemes []string - Title string - Description string -} - // SwaggerInfo holds exported Swagger Info so clients can modify it -var SwaggerInfo = swaggerInfo{ - Version: "1.0", - Host: "localhost:8080", - BasePath: "/api/v1", - Schemes: []string{}, - Title: "Swagger Example API", - Description: "This is a sample server celler server.", -} - -type s struct{} - -func (s *s) ReadDoc() string { - sInfo := SwaggerInfo - sInfo.Description = strings.Replace(sInfo.Description, "\n", "\\n", -1) - - t, err := template.New("swagger_info").Funcs(template.FuncMap{ - "marshal": func(v interface{}) string { - a, _ := json.Marshal(v) - return string(a) - }, - "escape": func(v interface{}) string { - // escape tabs - str := strings.Replace(v.(string), "\t", "\\t", -1) - // replace " with \", and if that results in \\", replace that with \\\" - str = strings.Replace(str, "\"", "\\\"", -1) - return strings.Replace(str, "\\\\\"", "\\\\\\\"", -1) - }, - }).Parse(doc) - if err != nil { - return doc - } - - var tpl bytes.Buffer - if err := t.Execute(&tpl, sInfo); err != nil { - return doc - } - - return tpl.String() +var SwaggerInfo = &swag.Spec{ + Version: "1.0", + Host: "localhost:8080", + BasePath: "/api/v1", + Schemes: []string{}, + Title: "Swagger Example API", + Description: "This is a sample server celler server.", + InfoInstanceName: "swagger", + SwaggerTemplate: docTemplate_swagger, } func init() { - swag.Register("swagger", &s{}) + swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo) } diff --git a/example/object-map-example/docs/docs.go b/example/object-map-example/docs/docs.go index 6b34311a2..ed8acd8ce 100644 --- a/example/object-map-example/docs/docs.go +++ b/example/object-map-example/docs/docs.go @@ -1,22 +1,14 @@ -// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Package docs GENERATED BY THE COMMAND ABOVE; DO NOT EDIT // This file was generated by swaggo/swag - package docs -import ( - "bytes" - "encoding/json" - "strings" - "text/template" - - "github.com/swaggo/swag" -) +import "github.com/swaggo/swag" -var doc = `{ +const docTemplate_swagger = `{ "schemes": {{ marshal .Schemes }}, "swagger": "2.0", "info": { - "description": "{{.Description}}", + "description": "{{escape .Description}}", "title": "{{.Title}}", "termsOfService": "http://swagger.io/terms/", "contact": {}, @@ -93,49 +85,18 @@ var doc = `{ } }` -type swaggerInfo struct { - Version string - Host string - BasePath string - Schemes []string - Title string - Description string -} - // SwaggerInfo holds exported Swagger Info so clients can modify it -var SwaggerInfo = swaggerInfo{ - Version: "1.0", - Host: "localhost:8080", - BasePath: "/api/v1", - Schemes: []string{}, - Title: "Swagger Map Example API", - Description: "", -} - -type s struct{} - -func (s *s) ReadDoc() string { - sInfo := SwaggerInfo - sInfo.Description = strings.Replace(sInfo.Description, "\n", "\\n", -1) - - t, err := template.New("swagger_info").Funcs(template.FuncMap{ - "marshal": func(v interface{}) string { - a, _ := json.Marshal(v) - return string(a) - }, - }).Parse(doc) - if err != nil { - return doc - } - - var tpl bytes.Buffer - if err := t.Execute(&tpl, sInfo); err != nil { - return doc - } - - return tpl.String() +var SwaggerInfo = &swag.Spec{ + Version: "1.0", + Host: "localhost:8080", + BasePath: "/api/v1", + Schemes: []string{}, + Title: "Swagger Map Example API", + Description: "", + InfoInstanceName: "swagger", + SwaggerTemplate: docTemplate_swagger, } func init() { - swag.Register(swag.Name, &s{}) + swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo) } diff --git a/gen/gen.go b/gen/gen.go index 9adc0967e..0eacfa5b1 100644 --- a/gen/gen.go +++ b/gen/gen.go @@ -409,8 +409,8 @@ import "github.com/swaggo/swag" const docTemplate_{{ .InstanceName }} = ` + "`{{ printDoc .Doc}}`" + ` -// SwaggerInfo_{{ .InstanceName }} holds exported Swagger Info so clients can modify it -var SwaggerInfo_{{ .InstanceName }} = &swag.Spec{ +// SwaggerInfo{{ if ne .InstanceName "swagger" }}_{{ .InstanceName }} {{- end }} holds exported Swagger Info so clients can modify it +var SwaggerInfo {{ if ne .InstanceName "swagger" }}_{{ .InstanceName }} {{- end }} = &swag.Spec{ Version: {{ printf "%q" .Version}}, Host: {{ printf "%q" .Host}}, BasePath: {{ printf "%q" .BasePath}}, @@ -422,6 +422,6 @@ var SwaggerInfo_{{ .InstanceName }} = &swag.Spec{ } func init() { - swag.Register(SwaggerInfo_{{ .InstanceName }}.InstanceName(), SwaggerInfo_{{ .InstanceName }}) + swag.Register(SwaggerInfo{{ if ne .InstanceName "swagger" }}_{{ .InstanceName }} {{- end }}.InstanceName(), SwaggerInfo{{ if ne .InstanceName "swagger" }}_{{ .InstanceName }} {{- end }}) } ` diff --git a/gen/gen_test.go b/gen/gen_test.go index 7d732025f..0802556aa 100644 --- a/gen/gen_test.go +++ b/gen/gen_test.go @@ -97,7 +97,7 @@ func TestGen_BuildInstanceName(t *testing.T) { } if !strings.Contains( string(expectedCode), - "swag.Register(SwaggerInfo_swagger.InstanceName(), SwaggerInfo_swagger)", + "swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo)", ) { t.Fatal(errors.New("generated go code does not contain the correct default registration sequence")) }