1package test
2
3import (
4	"encoding/json"
5	"strings"
6
7	"github.com/gogo/protobuf/proto"
8)
9
10type T struct {
11	Data string
12}
13
14func (gt *T) protoType() *ProtoType {
15	return &ProtoType{
16		Field2: &gt.Data,
17	}
18}
19
20func (gt T) Equal(other T) bool {
21	return gt.protoType().Equal(other.protoType())
22}
23
24func (gt *T) Size() int {
25	proto := &ProtoType{
26		Field2: &gt.Data,
27	}
28	return proto.Size()
29}
30
31func NewPopulatedT(r randyThetest) *T {
32	data := NewPopulatedProtoType(r, false).Field2
33	gt := &T{}
34	if data != nil {
35		gt.Data = *data
36	}
37	return gt
38}
39
40func (r T) Marshal() ([]byte, error) {
41	return proto.Marshal(r.protoType())
42}
43
44func (r *T) Unmarshal(data []byte) error {
45	pr := &ProtoType{}
46	err := proto.Unmarshal(data, pr)
47	if err != nil {
48		return err
49	}
50
51	if pr.Field2 != nil {
52		r.Data = *pr.Field2
53	}
54	return nil
55}
56
57func (gt T) MarshalJSON() ([]byte, error) {
58	return json.Marshal(gt.Data)
59}
60
61func (gt *T) UnmarshalJSON(data []byte) error {
62	var s string
63	err := json.Unmarshal(data, &s)
64	if err != nil {
65		return err
66	}
67	*gt = T{Data: s}
68	return nil
69}
70
71func (gt T) Compare(other T) int {
72	return strings.Compare(gt.Data, other.Data)
73}
74