makeFlags creates flag data and build function from endpoint arguments.
(e *EndpointData, args []*InitArgData, payload expr.DataType)
| 221 | |
| 222 | // makeFlags creates flag data and build function from endpoint arguments. |
| 223 | func 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, |
no test coverage detected