spec.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package swag
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "strings"
  6. "text/template"
  7. )
  8. // Spec holds exported Swagger Info so clients can modify it.
  9. type Spec struct {
  10. Version string
  11. Host string
  12. BasePath string
  13. Schemes []string
  14. Title string
  15. Description string
  16. InfoInstanceName string
  17. SwaggerTemplate string
  18. }
  19. // ReadDoc parses SwaggerTemplate into swagger document.
  20. func (i *Spec) ReadDoc() string {
  21. i.Description = strings.ReplaceAll(i.Description, "\n", "\\n")
  22. tpl, err := template.New("swagger_info").Funcs(template.FuncMap{
  23. "marshal": func(v interface{}) string {
  24. a, _ := json.Marshal(v)
  25. return string(a)
  26. },
  27. "escape": func(v interface{}) string {
  28. // escape tabs
  29. var str = strings.ReplaceAll(v.(string), "\t", "\\t")
  30. // replace " with \", and if that results in \\", replace that with \\\"
  31. str = strings.ReplaceAll(str, "\"", "\\\"")
  32. return strings.ReplaceAll(str, "\\\\\"", "\\\\\\\"")
  33. },
  34. }).Parse(i.SwaggerTemplate)
  35. if err != nil {
  36. return i.SwaggerTemplate
  37. }
  38. var doc bytes.Buffer
  39. if err = tpl.Execute(&doc, i); err != nil {
  40. return i.SwaggerTemplate
  41. }
  42. return doc.String()
  43. }
  44. // InstanceName returns Spec instance name.
  45. func (i *Spec) InstanceName() string {
  46. return i.InfoInstanceName
  47. }