goai_parameter.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
  2. //
  3. // This Source Code Form is subject to the terms of the MIT License.
  4. // If a copy of the MIT was not distributed with this file,
  5. // You can obtain one at https://github.com/gogf/gf.
  6. package goai
  7. import (
  8. "github.com/gogf/gf/v2/errors/gerror"
  9. "github.com/gogf/gf/v2/internal/json"
  10. "github.com/gogf/gf/v2/util/gconv"
  11. )
  12. // Parameter is specified by OpenAPI/Swagger 3.0 standard.
  13. // See https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md#parameterObject
  14. type Parameter struct {
  15. Name string `json:"name,omitempty"`
  16. In string `json:"in,omitempty"`
  17. Description string `json:"description,omitempty"`
  18. Style string `json:"style,omitempty"`
  19. Explode *bool `json:"explode,omitempty"`
  20. AllowEmptyValue bool `json:"allowEmptyValue,omitempty"`
  21. AllowReserved bool `json:"allowReserved,omitempty"`
  22. Deprecated bool `json:"deprecated,omitempty"`
  23. Required bool `json:"required,omitempty"`
  24. Schema *SchemaRef `json:"schema,omitempty"`
  25. Example interface{} `json:"example,omitempty"`
  26. Examples *Examples `json:"examples,omitempty"`
  27. Content *Content `json:"content,omitempty"`
  28. XExtensions XExtensions `json:"-"`
  29. }
  30. func (oai *OpenApiV3) tagMapToParameter(tagMap map[string]string, parameter *Parameter) error {
  31. var mergedTagMap = oai.fileMapWithShortTags(tagMap)
  32. if err := gconv.Struct(mergedTagMap, parameter); err != nil {
  33. return gerror.Wrap(err, `mapping struct tags to Parameter failed`)
  34. }
  35. oai.tagMapToXExtensions(mergedTagMap, parameter.XExtensions)
  36. return nil
  37. }
  38. func (p Parameter) MarshalJSON() ([]byte, error) {
  39. var (
  40. b []byte
  41. m map[string]json.RawMessage
  42. err error
  43. )
  44. type tempParameter Parameter // To prevent JSON marshal recursion error.
  45. if b, err = json.Marshal(tempParameter(p)); err != nil {
  46. return nil, err
  47. }
  48. if err = json.Unmarshal(b, &m); err != nil {
  49. return nil, err
  50. }
  51. for k, v := range p.XExtensions {
  52. if b, err = json.Marshal(v); err != nil {
  53. return nil, err
  54. }
  55. m[k] = b
  56. }
  57. return json.Marshal(m)
  58. }