goai_operation.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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. // Operation represents "operation" specified by OpenAPI/Swagger 3.0 standard.
  13. type Operation struct {
  14. Tags []string `json:"tags,omitempty"`
  15. Summary string `json:"summary,omitempty"`
  16. Description string `json:"description,omitempty"`
  17. OperationID string `json:"operationId,omitempty"`
  18. Parameters Parameters `json:"parameters,omitempty"`
  19. RequestBody *RequestBodyRef `json:"requestBody,omitempty"`
  20. Responses Responses `json:"responses"`
  21. Deprecated bool `json:"deprecated,omitempty"`
  22. Callbacks *Callbacks `json:"callbacks,omitempty"`
  23. Security *SecurityRequirements `json:"security,omitempty"`
  24. Servers *Servers `json:"servers,omitempty"`
  25. ExternalDocs *ExternalDocs `json:"externalDocs,omitempty"`
  26. XExtensions XExtensions `json:"-"`
  27. }
  28. func (oai *OpenApiV3) tagMapToOperation(tagMap map[string]string, operation *Operation) error {
  29. var mergedTagMap = oai.fileMapWithShortTags(tagMap)
  30. if err := gconv.Struct(mergedTagMap, operation); err != nil {
  31. return gerror.Wrap(err, `mapping struct tags to Operation failed`)
  32. }
  33. oai.tagMapToXExtensions(mergedTagMap, operation.XExtensions)
  34. return nil
  35. }
  36. func (o Operation) MarshalJSON() ([]byte, error) {
  37. var (
  38. b []byte
  39. m map[string]json.RawMessage
  40. err error
  41. )
  42. type tempOperation Operation // To prevent JSON marshal recursion error.
  43. if b, err = json.Marshal(tempOperation(o)); err != nil {
  44. return nil, err
  45. }
  46. if err = json.Unmarshal(b, &m); err != nil {
  47. return nil, err
  48. }
  49. for k, v := range o.XExtensions {
  50. if b, err = json.Marshal(v); err != nil {
  51. return nil, err
  52. }
  53. m[k] = b
  54. }
  55. return json.Marshal(m)
  56. }