danielgtaylor / danielgtaylor/huma
Primitive-based types are not reused in the generated OAS.
- Dominant language
- Go
- Stars
- 4.4k
- Forks
- 285
- Avg merge
- 40m
- Merged PRs (30d)
- 1
Description
Hey there!
I've got the following types
```go
var _ huma.SchemaTransformer = CustomHeader("")
type CustomHeader string
func (h CustomHeader) TransformSchema(r huma.Registry, s *huma.Schema) *huma.Schema {
s.Type = "string"
s.Description = "Custom header Description. The CustomHeader schema should be reused across all endpoints that use it."
return s
}
type CreateUser struct {
Body struct {
Name string `json:"name" doc:"The name."`
}
CustomHeader CustomHeader `header:"X-Custom-Header"`
}
type UpdateUser struct {
Body struct {
Name string `json:"name" doc:"The name."`
}
CustomHeader CustomHeader `header:"X-Custom-Header"`
}
type Output struct {
Body struct {
Message string `json:"message" doc:"The message."`
}
}
```
With the following routes
```go
huma.Post(api, "/user", func(ctx context.Context, req *CreateUser) (*Output, error) {
resp := &Output{}
resp.Body.Message = "It works!"
return resp, nil
})
huma.Patch(api, "/user/{id}", func(ctx context.Context, req *UpdateUser) (*Output, error) {
resp := &Output{}
resp.Body.Message = "It works!"
return resp, nil
}}
```
I expect that `CustomHeader` would be re-used via `$ref` in the generated OAS.
Instead the `CustomHeader` schema is embedded into all the endpoints
```yaml
paths:
/user:
post:
operationId: post-user
parameters:
- description: Custom header Description. The CustomHeader schema should be reused across all endpoints that use it.
in: header
name: X-Custom-Header
schema:
description: Custom header Description. The CustomHeader schema should be reused across all endpoints that use it.
type: string
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/CreateUserBody"
required: true
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/OutputBody"
description: OK
default:
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ErrorModel"
description: Error
summary: Post user
/user/{id}:
patch:
operationId: patch-user-by-id
parameters:
- description: Custom header Description. The CustomHeader schema should be reused across all endpoints that use it.
in: header
name: X-Custom-Header
schema:
description: Custom header Description. The CustomHeader schema should be reused across all endpoints that use it.
type: string
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateUserBody"
required: true
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/OutputBody"
description: OK
default:
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ErrorModel"
description: Error
summary: Patch user by ID
```
Can an operation be registered to force Huma to reuse shared schemas?
Thank you.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.