diff --git a/packet.go b/packet.go index 5afcff1..1461ede 100644 --- a/packet.go +++ b/packet.go @@ -48,3 +48,8 @@ func unmarshalUint64(b []byte) (uint64, []byte) { l, b := unmarshalUint32(b) return uint64(h)<<32 | uint64(l), b } + +func unmarshalString(b []byte) (string, []byte) { + n, b := unmarshalUint32(b) + return string(b[:n]), b[n:] +} diff --git a/packet_test.go b/packet_test.go index 6c39897..3d8999e 100644 --- a/packet_test.go +++ b/packet_test.go @@ -128,3 +128,21 @@ func TestUnmarshalUint64(t *testing.T) { } } } + +var unmarshalStringTests = []struct { + b []byte + want string + rest []byte +}{ + {marshalString(nil, ""), "", nil}, + {marshalString(nil, "blah"), "blah", nil}, +} + +func TestUnmarshalString(t *testing.T) { + for _, tt := range unmarshalStringTests { + got, rest := unmarshalString(tt.b) + if got != tt.want || !bytes.Equal(rest, tt.rest) { + t.Errorf("unmarshalUint64(%v): want %q, %#v, got %q, %#v", tt.b, tt.want, tt.rest, got, rest) + } + } +}