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  }