goai_response.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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. // Response is specified by OpenAPI/Swagger 3.0 standard.
  13. type Response struct {
  14. Description string `json:"description"`
  15. Headers Headers `json:"headers,omitempty"`
  16. Content Content `json:"content,omitempty"`
  17. Links Links `json:"links,omitempty"`
  18. XExtensions XExtensions `json:"-"`
  19. }
  20. func (oai *OpenApiV3) tagMapToResponse(tagMap map[string]string, response *Response) error {
  21. var mergedTagMap = oai.fileMapWithShortTags(tagMap)
  22. if err := gconv.Struct(mergedTagMap, response); err != nil {
  23. return gerror.Wrap(err, `mapping struct tags to Response failed`)
  24. }
  25. oai.tagMapToXExtensions(mergedTagMap, response.XExtensions)
  26. return nil
  27. }
  28. func (r Response) MarshalJSON() ([]byte, error) {
  29. var (
  30. b []byte
  31. m map[string]json.RawMessage
  32. err error
  33. )
  34. type tempResponse Response // To prevent JSON marshal recursion error.
  35. if b, err = json.Marshal(tempResponse(r)); err != nil {
  36. return nil, err
  37. }
  38. if err = json.Unmarshal(b, &m); err != nil {
  39. return nil, err
  40. }
  41. for k, v := range r.XExtensions {
  42. if b, err = json.Marshal(v); err != nil {
  43. return nil, err
  44. }
  45. m[k] = b
  46. }
  47. return json.Marshal(m)
  48. }