edgedb-go
edgedb-go copied to clipboard
Feature request: enable wrapping EdgeDB types
AFAIK there are currently two ways to bind optional or non-primitive type values with EdgeDB:
- using one of the provided types in
edgedbtypes, e.g.OptionalStr, which cannot be extended with additional methods - implementing one of the
EdgeDB{*}Marshalerinterfaces, which is cumbersome when you have to do it for multiple types
Would it be possible to expose an interface that custom wrappers for EdgeDB-compatible types could implement ? Something like:
type EdgeDBTypeWrapper[T any] interface {
Value() *T
}
EdgeDBTypeWrapper.Value() could then be used internally to retrieve the wrapped type and marshal/unmarshal values when interacting with EdgeDB.
Example use-case:
type OptionalStrWrapper struct {
edgedb.OptionalStr
}
func (o OptionalStrWrapper) Value() *edgedb.OptionalStr {
return o.OptionalStr
}
func (o OptionalStrWrapper) SomeMethodUnrelatedToEdgeDB() {
// ...
}
I would be willing to submit a PR for this, but I am not sure where to start. Would it be as simple as adding an extra case in codecs.*.Encode methods ?
I understand the friction. There may be room for improvement here. I'll have to think about this.
It seems like there should be an interface for decoding too.