-
-
Notifications
You must be signed in to change notification settings - Fork 38
Open
Description
Such a YAML endpoint fails to encode on client request invocation, leading to a error formatting 'param_id': unsupported type Header
error with a nested struct:
...
paths:
/my/endpoint:
post:
security: []
operationId: myOpId
parameters:
- name: param_id
in: query
style: form
schema:
$ref: "#/components/schemas/ParentStruct"
...
with ParentStruct
being generated like:
type ParentStruct struct {
Header Header `json:"header"` // a simple struct with a few fields
}
(I don't own and can't modify the YAML, I know such a use case is very unconventional)
Call stack:
// my code
client.MyEndpointWithResponse
// generated code
c.MyEndpoint(ctx, params, reqEditors...)
NewMyEndpointRequest(c.Server, params)
// starting from here we're inside `styleparam.go` from this repo
runtime.StyleParamWithLocation("form", true, "param_id", runtime.ParamLocationQuery, *params.ParamId)
styleStruct(style, explode, paramName, paramLocation, value)
primitiveToString(value) // <-- value is my Header here
// inside this function, it correctly passes into the `case reflect.Struct`, but fails because it doesn't conform to `uuid.UUID` nor to `json.Marshaler` (for some reason)
// as a result, it `fallthrough`s in `default:` and also fails the conformity check to `fmt.Stringer`, leading to the error.
I didn't inspect the code that much, but I fail to understand why the serialization process uses the custom reflection logic instead of simply using json.Encode which would 100% do the job.
Thank you in advance!
Metadata
Metadata
Assignees
Labels
No labels