github.com/gogf/gf/v2@v2.7.4/net/goai/goai_response.go (about)

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