diff options
| author | mo khan <mo@mokhan.ca> | 2025-07-22 17:35:49 -0600 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2025-07-22 17:35:49 -0600 |
| commit | 20ef0d92694465ac86b550df139e8366a0a2b4fa (patch) | |
| tree | 3f14589e1ce6eb9306a3af31c3a1f9e1af5ed637 /vendor/github.com/hamba/avro/v2/codec_default.go | |
| parent | 44e0d272c040cdc53a98b9f1dc58ae7da67752e6 (diff) | |
feat: connect to spicedb
Diffstat (limited to 'vendor/github.com/hamba/avro/v2/codec_default.go')
| -rw-r--r-- | vendor/github.com/hamba/avro/v2/codec_default.go | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/vendor/github.com/hamba/avro/v2/codec_default.go b/vendor/github.com/hamba/avro/v2/codec_default.go new file mode 100644 index 0000000..c42bdc3 --- /dev/null +++ b/vendor/github.com/hamba/avro/v2/codec_default.go @@ -0,0 +1,58 @@ +package avro + +import ( + "fmt" + "unsafe" + + "github.com/modern-go/reflect2" +) + +func createDefaultDecoder(d *decoderContext, field *Field, typ reflect2.Type) ValDecoder { + cfg := d.cfg + fn := func(def any) ([]byte, error) { + defaultType := reflect2.TypeOf(def) + if defaultType == nil { + defaultType = reflect2.TypeOf((*null)(nil)) + } + defaultEncoder := encoderOfType(newEncoderContext(cfg), field.Type(), defaultType) + if defaultType.LikePtr() { + defaultEncoder = &onePtrEncoder{defaultEncoder} + } + w := cfg.borrowWriter() + defer cfg.returnWriter(w) + + defaultEncoder.Encode(reflect2.PtrOf(def), w) + if w.Error != nil { + return nil, w.Error + } + b := w.Buffer() + data := make([]byte, len(b)) + copy(data, b) + + return data, nil + } + + b, err := field.encodeDefault(fn) + if err != nil { + return &errorDecoder{err: fmt.Errorf("decode default: %w", err)} + } + return &defaultDecoder{ + data: b, + decoder: decoderOfType(d, field.Type(), typ), + } +} + +type defaultDecoder struct { + data []byte + decoder ValDecoder +} + +// Decode implements ValDecoder. +func (d *defaultDecoder) Decode(ptr unsafe.Pointer, r *Reader) { + rr := r.cfg.borrowReader(d.data) + defer r.cfg.returnReader(rr) + + d.decoder.Decode(ptr, rr) +} + +var _ ValDecoder = &defaultDecoder{} |
