Skip to content
Snippets Groups Projects
Commit 0810956e authored by capossele's avatar capossele
Browse files

:recycle: improves parsing

parent 77b481b7
No related branches found
No related tags found
No related merge requests found
...@@ -58,6 +58,15 @@ func (payload *Payload) DistributedPK() []byte { ...@@ -58,6 +58,15 @@ func (payload *Payload) DistributedPK() []byte {
return payload.dpk return payload.dpk
} }
// Parse is a wrapper for simplified unmarshaling in a byte stream using the marshalUtil package.
func Parse(marshalUtil *marshalutil.MarshalUtil) (*Payload, error) {
if payload, err := marshalUtil.Parse(func(data []byte) (interface{}, error, int) { return FromBytes(data) }); err != nil {
return &Payload{}, err
} else {
return payload.(*Payload), nil
}
}
// FromBytes parses the marshaled version of a Payload into an object. // FromBytes parses the marshaled version of a Payload into an object.
// It either returns a new Payload or fills an optionally provided Payload with the parsed information. // It either returns a new Payload or fills an optionally provided Payload with the parsed information.
func FromBytes(bytes []byte, optionalTargetObject ...*Payload) (result *Payload, err error, consumedBytes int) { func FromBytes(bytes []byte, optionalTargetObject ...*Payload) (result *Payload, err error, consumedBytes int) {
......
...@@ -18,15 +18,13 @@ func TestParse(t *testing.T) { ...@@ -18,15 +18,13 @@ func TestParse(t *testing.T) {
bytes := payload.Bytes() bytes := payload.Bytes()
marshalUtil := marshalutil.New(bytes) marshalUtil := marshalutil.New(bytes)
parsedpayload, err := marshalUtil.Parse(func(data []byte) (interface{}, error, int) { return FromBytes(data) }) parsedPayload, err := Parse(marshalUtil)
require.NoError(t, err) require.NoError(t, err)
cb := parsedpayload.(*Payload) require.Equal(t, payload.SubType(), parsedPayload.SubType())
require.Equal(t, payload.Instance(), parsedPayload.Instance())
require.Equal(t, payload.SubType(), cb.SubType()) require.Equal(t, payload.Round(), parsedPayload.Round())
require.Equal(t, payload.Instance(), cb.Instance()) require.Equal(t, payload.PrevSignature(), parsedPayload.PrevSignature())
require.Equal(t, payload.Round(), cb.Round()) require.Equal(t, payload.Signature(), parsedPayload.Signature())
require.Equal(t, payload.PrevSignature(), cb.PrevSignature()) require.Equal(t, payload.DistributedPK(), parsedPayload.DistributedPK())
require.Equal(t, payload.Signature(), cb.Signature())
require.Equal(t, payload.DistributedPK(), cb.DistributedPK())
} }
...@@ -36,6 +36,15 @@ func (payload *Payload) Data() []byte { ...@@ -36,6 +36,15 @@ func (payload *Payload) Data() []byte {
return payload.data return payload.data
} }
// Parse is a wrapper for simplified unmarshaling in a byte stream using the marshalUtil package.
func Parse(marshalUtil *marshalutil.MarshalUtil) (*Payload, error) {
if payload, err := marshalUtil.Parse(func(data []byte) (interface{}, error, int) { return FromBytes(data) }); err != nil {
return &Payload{}, err
} else {
return payload.(*Payload), nil
}
}
// FromBytes parses the marshaled version of a Payload into an object. // FromBytes parses the marshaled version of a Payload into an object.
// It either returns a new Payload or fills an optionally provided Payload with the parsed information. // It either returns a new Payload or fills an optionally provided Payload with the parsed information.
func FromBytes(bytes []byte, optionalTargetObject ...*Payload) (result *Payload, err error, consumedBytes int) { func FromBytes(bytes []byte, optionalTargetObject ...*Payload) (result *Payload, err error, consumedBytes int) {
......
...@@ -15,12 +15,10 @@ func TestParse(t *testing.T) { ...@@ -15,12 +15,10 @@ func TestParse(t *testing.T) {
bytes := payload.Bytes() bytes := payload.Bytes()
marshalUtil := marshalutil.New(bytes) marshalUtil := marshalutil.New(bytes)
parsedpayload, err := marshalUtil.Parse(func(data []byte) (interface{}, error, int) { return FromBytes(data) }) parsedPayload, err := Parse(marshalUtil)
require.NoError(t, err) require.NoError(t, err)
cb := parsedpayload.(*Payload) require.Equal(t, payload.SubType(), parsedPayload.SubType())
require.Equal(t, payload.Instance(), parsedPayload.Instance())
require.Equal(t, payload.SubType(), cb.SubType()) require.Equal(t, payload.Data(), parsedPayload.Data())
require.Equal(t, payload.Instance(), cb.Instance())
require.Equal(t, payload.Data(), cb.Data())
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment