13 func (i *Int3) Pack(p []byte, opt *Options) (int, error) {
15 binary.BigEndian.PutUint32(tmp[:], uint32(*i))
19 func (i *Int3) Unpack(r io.Reader, length int, opt *Options) error {
21 if _, err := r.Read(tmp[1:]); err != nil {
24 *i = Int3(binary.BigEndian.Uint32(tmp[:]))
27 func (i *Int3) Size(opt *Options) int {
30 func (i *Int3) String() string {
31 return strconv.FormatUint(uint64(*i), 10)
34 func TestCustom(t *testing.T) {
37 if err := Pack(&buf, &i); err != nil {
40 if !bytes.Equal(buf.Bytes(), []byte{0, 0, 3}) {
41 t.Fatal("error packing custom int")
44 if err := Unpack(&buf, &i2); err != nil {
48 t.Fatal("error unpacking custom int")
52 type Int3Struct struct {
56 func TestCustomStruct(t *testing.T) {
59 if err := Pack(&buf, &i); err != nil {
62 if !bytes.Equal(buf.Bytes(), []byte{0, 0, 3}) {
63 t.Fatal("error packing custom int struct")
66 if err := Unpack(&buf, &i2); err != nil {
70 t.Fatal("error unpacking custom int struct")
74 // TODO: slices of custom types don't work yet
76 type Int3SliceStruct struct {
80 func TestCustomSliceStruct(t *testing.T) {
82 i := Int3SliceStruct{[2]Int3{3, 4}}
83 if err := Pack(&buf, &i); err != nil {
86 if !bytes.Equal(buf.Bytes(), []byte{0, 0, 3}) {
87 t.Fatal("error packing custom int struct")
89 var i2 Int3SliceStruct
90 if err := Unpack(&buf, &i2); err != nil {
93 if i2.I[0] != 3 && i2.I[1] != 4 {
94 t.Fatal("error unpacking custom int struct")