summaryrefslogtreecommitdiff
path: root/vendor/github.com/hamba/avro/v2/codec_default.go
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2025-07-24 17:58:01 -0600
committermo khan <mo@mokhan.ca>2025-07-24 17:58:01 -0600
commit72296119fc9755774719f8f625ad03e0e0ec457a (patch)
treeed236ddee12a20fb55b7cfecf13f62d3a000dcb5 /vendor/github.com/hamba/avro/v2/codec_default.go
parenta920a8cfe415858bb2777371a77018599ffed23f (diff)
parenteaa1bd3b8e12934aed06413d75e7482ac58d805a (diff)
Merge branch 'the-spice-must-flow' into 'main'
Add SpiceDB Authorization See merge request gitlab-org/software-supply-chain-security/authorization/sparkled!19
Diffstat (limited to 'vendor/github.com/hamba/avro/v2/codec_default.go')
-rw-r--r--vendor/github.com/hamba/avro/v2/codec_default.go58
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{}