github.com/aacfactory/avro@v1.2.12/internal/base/schema_test.go (about) 1 package base_test 2 3 import ( 4 "github.com/aacfactory/avro/internal/base" 5 "testing" 6 "time" 7 ) 8 9 type Any struct { 10 p []byte 11 } 12 13 func (a *Any) UnmarshalAvro(p []byte) error { 14 a.p = p 15 return nil 16 } 17 18 func (a Any) MarshalAvro() ([]byte, error) { 19 return a.p, nil 20 } 21 22 type Bar struct { 23 String string `avro:"string"` 24 Next *Bar `avro:"next"` 25 } 26 27 type Foo struct { 28 String string `avro:"string"` 29 Boolean bool `avro:"boolean"` 30 Int int `avro:"int"` 31 Long int64 `avro:"long"` 32 Float float32 `avro:"float"` 33 Double float64 `avro:"double"` 34 Uint uint64 `avro:"uint"` 35 Time time.Time `avro:"time"` 36 Dur time.Duration `avro:"dur"` 37 Byte byte `avro:"byte"` 38 Bytes []byte `avro:"bytes"` 39 Bar Bar `avro:"bar"` 40 Baz *Bar `avro:"baz"` 41 Bars []Bar `avro:"bars"` 42 Map map[string]Bar `avro:"map"` 43 Any Any `avro:"any"` 44 } 45 46 func TestParseValue(t *testing.T) { 47 s, parseErr := base.ParseValue(Foo{}) 48 if parseErr != nil { 49 t.Error(parseErr) 50 return 51 } 52 t.Log(s) 53 foo := Foo{ 54 String: "foo", 55 Boolean: true, 56 Int: 1, 57 Long: 2, 58 Float: 3.3, 59 Double: 4.4, 60 Uint: uint64(5), 61 Time: time.Now(), 62 Dur: 10 * time.Hour, 63 Byte: 'B', 64 Bytes: []byte("bytes"), 65 Bar: Bar{ 66 String: "bar", 67 Next: &Bar{ 68 String: "Bar-Next", 69 Next: nil, 70 }, 71 }, 72 Baz: nil, 73 Bars: []Bar{{String: "bar-1"}}, 74 Map: map[string]Bar{"bar2": {String: "bar-2"}}, 75 Any: Any{ 76 p: []byte("xxx"), 77 }, 78 } 79 80 p, encodeErr := base.Marshal(s, foo) 81 if encodeErr != nil { 82 t.Error(encodeErr) 83 return 84 } 85 t.Log(len(p)) 86 r := Foo{} 87 decodeErr := base.Unmarshal(s, p, &r) 88 if decodeErr != nil { 89 t.Error(decodeErr) 90 return 91 } 92 t.Logf("%+v", r) 93 }