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{*}Marshaler interfaces, 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 ?
AFAIK there are currently two ways to bind optional or non-primitive type values with EdgeDB:
edgedbtypes
, e.g.OptionalStr
, which cannot be extended with additional methodsEdgeDB{*}Marshaler
interfaces, which is cumbersome when you have to do it for multiple typesWould it be possible to expose an interface that custom wrappers for EdgeDB-compatible types could implement ? Something like:
EdgeDBTypeWrapper.Value()
could then be used internally to retrieve the wrapped type and marshal/unmarshal values when interacting with EdgeDB.Example use-case:
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 ?