MCPcopy Create free account
hub / github.com/goadesign/goa / makeFlags

Function makeFlags

http/codegen/client_cli.go:223–285  ·  view source on GitHub ↗

makeFlags creates flag data and build function from endpoint arguments.

(e *EndpointData, args []*InitArgData, payload expr.DataType)

Source from the content-addressed store, hash-verified

221
222// makeFlags creates flag data and build function from endpoint arguments.
223func makeFlags(e *EndpointData, args []*InitArgData, payload expr.DataType) ([]*cli.FlagData, *cli.BuildFunctionData) {
224 var (
225 fdata = make([]*cli.FieldData, 0, len(args)) // preallocate
226 flags = make([]*cli.FlagData, len(args))
227 params = make([]string, len(args))
228 pInitArgs = make([]*codegen.InitArgData, len(args))
229 check bool
230 )
231 for i, arg := range args {
232 pInitArgs[i] = &codegen.InitArgData{
233 Name: arg.VarName,
234 Pointer: arg.Pointer,
235 FieldName: arg.FieldName,
236 FieldPointer: arg.FieldPointer,
237 FieldType: arg.FieldType,
238 Type: arg.Type,
239 }
240
241 f := cli.NewFlagData(e.ServiceName, e.Method.Name, arg.VarName, arg.TypeName, arg.Description, arg.Required, arg.Example, arg.DefaultValue)
242 flags[i] = f
243 params[i] = f.FullName
244 if arg.FieldName == "" && arg.VarName != "body" {
245 continue
246 }
247 code, chek := cli.FieldLoadCode(f, arg.VarName, arg.TypeName, arg.Validate, arg.DefaultValue, payload, e.Payload.Ref)
248 check = check || chek
249 tn := arg.TypeRef
250 if f.Type == "JSON" {
251 // We need to declare the variable without
252 // a pointer to be able to unmarshal the JSON
253 // using its address.
254 tn = arg.TypeName
255 }
256 fdata = append(fdata, &cli.FieldData{
257 Name: arg.VarName,
258 VarName: arg.VarName,
259 TypeRef: tn,
260 Init: code,
261 })
262 }
263
264 pInit := cli.PayloadInitData{
265 Code: e.Payload.Request.PayloadInit.ClientCode,
266 ReturnTypeAttribute: e.Payload.Request.PayloadInit.ReturnTypeAttribute,
267 ReturnTypeAttributePointer: e.Payload.Request.PayloadInit.ReturnIsPrimitivePointer,
268 ReturnIsStruct: e.Payload.Request.PayloadInit.ReturnIsStruct,
269 ReturnTypeName: e.Payload.Request.PayloadInit.ReturnTypeName,
270 ReturnTypePkg: e.Payload.Request.PayloadInit.ReturnTypePkg,
271 Args: pInitArgs,
272 }
273
274 return flags, &cli.BuildFunctionData{
275 Name: "Build" + e.Method.VarName + "Payload",
276 ActualParams: params,
277 FormalParams: params,
278 ServiceName: e.ServiceName,
279 MethodName: e.Method.Name,
280 ResultType: e.Payload.Ref,

Callers 1

buildFlagsFunction · 0.70

Calls 2

NewFlagDataFunction · 0.92
FieldLoadCodeFunction · 0.92

Tested by

no test coverage detected