From 0810956e88ab3546b140212c3dc4de8f617b87d0 Mon Sep 17 00:00:00 2001
From: capossele <angelocapossele@gmail.com>
Date: Wed, 18 Mar 2020 20:42:07 +0000
Subject: [PATCH] :recycle: improves parsing

---
 .../collectiveBeacon/collective_beacon.go        |  9 +++++++++
 .../collectiveBeacon/collective_beacon_test.go   | 16 +++++++---------
 packages/binary/drng/payload/payload.go          |  9 +++++++++
 packages/binary/drng/payload/payload_test.go     | 10 ++++------
 4 files changed, 29 insertions(+), 15 deletions(-)

diff --git a/packages/binary/drng/payload/collectiveBeacon/collective_beacon.go b/packages/binary/drng/payload/collectiveBeacon/collective_beacon.go
index 56013c99..8682758a 100644
--- a/packages/binary/drng/payload/collectiveBeacon/collective_beacon.go
+++ b/packages/binary/drng/payload/collectiveBeacon/collective_beacon.go
@@ -58,6 +58,15 @@ func (payload *Payload) DistributedPK() []byte {
 	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.
 // 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) {
diff --git a/packages/binary/drng/payload/collectiveBeacon/collective_beacon_test.go b/packages/binary/drng/payload/collectiveBeacon/collective_beacon_test.go
index aaf92bf3..8bcb69a2 100644
--- a/packages/binary/drng/payload/collectiveBeacon/collective_beacon_test.go
+++ b/packages/binary/drng/payload/collectiveBeacon/collective_beacon_test.go
@@ -18,15 +18,13 @@ func TestParse(t *testing.T) {
 	bytes := payload.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)
 
-	cb := parsedpayload.(*Payload)
-
-	require.Equal(t, payload.SubType(), cb.SubType())
-	require.Equal(t, payload.Instance(), cb.Instance())
-	require.Equal(t, payload.Round(), cb.Round())
-	require.Equal(t, payload.PrevSignature(), cb.PrevSignature())
-	require.Equal(t, payload.Signature(), cb.Signature())
-	require.Equal(t, payload.DistributedPK(), cb.DistributedPK())
+	require.Equal(t, payload.SubType(), parsedPayload.SubType())
+	require.Equal(t, payload.Instance(), parsedPayload.Instance())
+	require.Equal(t, payload.Round(), parsedPayload.Round())
+	require.Equal(t, payload.PrevSignature(), parsedPayload.PrevSignature())
+	require.Equal(t, payload.Signature(), parsedPayload.Signature())
+	require.Equal(t, payload.DistributedPK(), parsedPayload.DistributedPK())
 }
diff --git a/packages/binary/drng/payload/payload.go b/packages/binary/drng/payload/payload.go
index 9637cbcb..aaf75527 100644
--- a/packages/binary/drng/payload/payload.go
+++ b/packages/binary/drng/payload/payload.go
@@ -36,6 +36,15 @@ func (payload *Payload) Data() []byte {
 	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.
 // 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) {
diff --git a/packages/binary/drng/payload/payload_test.go b/packages/binary/drng/payload/payload_test.go
index 16aa567b..ad811340 100644
--- a/packages/binary/drng/payload/payload_test.go
+++ b/packages/binary/drng/payload/payload_test.go
@@ -15,12 +15,10 @@ func TestParse(t *testing.T) {
 	bytes := payload.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)
 
-	cb := parsedpayload.(*Payload)
-
-	require.Equal(t, payload.SubType(), cb.SubType())
-	require.Equal(t, payload.Instance(), cb.Instance())
-	require.Equal(t, payload.Data(), cb.Data())
+	require.Equal(t, payload.SubType(), parsedPayload.SubType())
+	require.Equal(t, payload.Instance(), parsedPayload.Instance())
+	require.Equal(t, payload.Data(), parsedPayload.Data())
 }
-- 
GitLab