Support custom `format` types.
abemedia opened this issue · comments
Description
I'd like to propose adding support for custom format
types. These could come from the configuration. Maybe something like the following example:
generator:
formats:
decimal: github.com/shopspring/decimal.Decimal
This would result in a field with format: decimal
to be of the type decimal.Decimal
from the package github.com/shopspring/decimal
.
Alternatively, we could implement this as an extension e.g.
type: string
x-ogen-type: github.com/shopspring/decimal.Decimal
We can implement some checks to ensure the package is importable, as well as checking that the type implements one of the following interfaces:
interface {
Encode(e *jx.Encoder)
Decode(d *jx.Decoder) error
}
interface {
json.Marshaler
json.Unmarshaler
}
interface {
encoding.TextMarshaler
encoding.TextUnmarshaler
}
Based on which of the interfaces it implements we can use a different template for encoding and decoding the value.
I'm happy to implement this feature, just wanted to first check if such a feature would be accepted and get alignment on the way it's configured.
I'm happy to implement this feature, just wanted to first check if such a feature would be accepted and get alignment on the way it's configured.
It would be nice. This feature was requested before.
I think it is better to configure it via extension x-go-type
, since it also used by oapi-codegen
and go-swagger.
Thanks for getting back to me on this @tdakkota!
Both oapi-codegen and go-swagger use different formats though:
oapi-codegen
x-go-type: googleuuid.UUID
x-go-type-import:
path: github.com/google/uuid
name: googleuuid
go-swagger
x-go-type:
import:
package: github.com/google/uuid
alias: googleuuid
type: UUID
I personally still prefer the idea of writing a single field e.g.
x-go-type: github.com/google/uuid.UUID
We could also automatically alias it if there's a clash between package names.
What's your preference?
I personally still prefer the idea of writing a single field e.g.
x-go-type: github.com/google/uuid.UUID
Me too.
I didn't notice that oapi-codegen requires a x-go-type-import
. In that case, let's keep it x-ogen-type
.
Any news on this issue, it would be nice to see this implemented?
It would be really cool.
I’m also really looking forward to it, I’ve been following this issue for a long time
Hey guys, will likely be able to dedicate some time to this in the coming week.