edgedb / edgedb-go

The official Go client library for EdgeDB
https://pkg.go.dev/github.com/edgedb/edgedb-go
Apache License 2.0
167 stars 11 forks source link

Feature request: enable wrapping EdgeDB types #305

Open lsdch opened 3 months ago

lsdch commented 3 months ago

AFAIK there are currently two ways to bind optional or non-primitive type values with EdgeDB:

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 ?

fmoor commented 3 months ago

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.