MCPcopy Create free account
hub / github.com/pace/bricks / generateResponseInterface

Method generateResponseInterface

http/jsonapi/generator/generate_handler.go:151–256  ·  view source on GitHub ↗
(route *route, schema *openapi3.T)

Source from the content-addressed store, hash-verified

149}
150
151func (g *Generator) generateResponseInterface(route *route, schema *openapi3.T) error {
152 var methods []jen.Code
153 methods = append(methods, jen.Qual("net/http", "ResponseWriter"))
154
155 // sort by key
156 keys := make([]string, 0, route.operation.Responses.Len())
157 for k := range route.operation.Responses.Map() {
158 keys = append(keys, k)
159 }
160 sort.Stable(sort.StringSlice(keys))
161
162 for _, code := range keys {
163 response := route.operation.Responses.Map()[code]
164
165 // don't generate response helpers for things that are handled by the framework
166 if generatorResponseBlacklist[code] {
167 continue
168 }
169
170 // error responses have an error message parameter
171 codeNum, err := strconv.Atoi(code)
172 if err != nil {
173 return fmt.Errorf("failed to parse response code %s: %v", code, err)
174 }
175
176 // generate method name
177 var methodName string
178 if response.Ref != "" {
179 methodName = generateMethodName(filepath.Base(response.Ref))
180 } else if response.Value.Description != nil {
181 methodName = generateMethodName(*response.Value.Description)
182 }
183
184 method := jen.Id(methodName)
185 if codeNum >= 400 {
186 method.Params(jen.Error())
187
188 defer func() { // defer to put methods after type
189 // generate the method as function for the implementing type
190 g.addGoDoc(methodName, fmt.Sprintf("responds with jsonapi error (HTTP code %d)", codeNum))
191 g.goSource.Func().Params(jen.Id("w").Op("*").Id(route.responseTypeImpl)).
192 Id(methodName).Params(jen.Id("err").Error()).Block(
193 jen.Qual(pkgJSONAPIRuntime, "WriteError").Call(
194 jen.Id("w"),
195 jen.Lit(codeNum),
196 jen.Id("err"),
197 ),
198 )
199 }()
200 } else if mt := response.Value.Content.Get(jsonapiContent); mt != nil {
201 typeReference, err := g.generateTypeReference(route.serviceFunc+methodName,
202 mt.Schema, false)
203 if err != nil {
204 return err
205 }
206 method.Params(typeReference)
207
208 defer func() { // defer to put methods after type

Callers 1

Calls 10

addGoDocMethod · 0.95
generateTypeReferenceMethod · 0.95
generateMethodNameFunction · 0.85
LenMethod · 0.80
ErrorfMethod · 0.80
TypeMethod · 0.80
MapMethod · 0.65
GetMethod · 0.65
AddMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected