Skip to content

Commit

Permalink
Merge branch 'main' into feat/jamtime
Browse files Browse the repository at this point in the history
  • Loading branch information
aranw committed Aug 8, 2024
2 parents 0c5ef05 + 2c9c24f commit d405d2f
Show file tree
Hide file tree
Showing 7 changed files with 117 additions and 1 deletion.
2 changes: 1 addition & 1 deletion internal/block/block.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ type Block struct {

// Extrinsic represents the block extrinsic data
type Extrinsic struct {
ET []*TicketProof
ET *TicketExtrinsic
EP *PreimageExtrinsic
ED *DisputeExtrinsic
EA *AssurancesExtrinsic
Expand Down
5 changes: 5 additions & 0 deletions internal/block/ticket.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,8 @@ type TicketProof struct {
EntryIndex uint8 // r ∈ Nn (0, 1)
Proof [ticketProofSize]byte // RingVRF proof
}

// TicketExtrinsic represents the E_T extrinsic
type TicketExtrinsic struct {
TicketProofs []TicketProof
}
6 changes: 6 additions & 0 deletions pkg/serialization/codec/codec.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package codec

type Codec interface {
Marshal(v interface{}) ([]byte, error)
Unmarshal(data []byte, v interface{}) error
}
16 changes: 16 additions & 0 deletions pkg/serialization/codec/json_codec.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package codec

import (
"encoding/json"
)

// JSONCodec implements the Codec interface for JSON encoding and decoding.
type JSONCodec struct{}

func (j *JSONCodec) Marshal(v interface{}) ([]byte, error) {
return json.Marshal(v)
}

func (j *JSONCodec) Unmarshal(data []byte, v interface{}) error {
return json.Unmarshal(data, v)
}
14 changes: 14 additions & 0 deletions pkg/serialization/codec/scale_codec.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package codec

import "github.com/ChainSafe/gossamer/pkg/scale"

// SCALECodec implements the Codec interface for SCALE encoding and decoding.
type SCALECodec struct{}

func (s *SCALECodec) Marshal(v interface{}) ([]byte, error) {
return scale.Marshal(v)
}

func (s *SCALECodec) Unmarshal(data []byte, v interface{}) error {
return scale.Unmarshal(data, v)
}
23 changes: 23 additions & 0 deletions pkg/serialization/serializer.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package serialization

import "github.com/eigerco/strawberry/pkg/serialization/codec"

// Serializer provides methods to encode and decode using a specified codec.
type Serializer struct {
codec codec.Codec
}

// NewSerializer initializes a new Serializer with the given codec.
func NewSerializer(c codec.Codec) *Serializer {
return &Serializer{codec: c}
}

// Encode serializes the given value using the codec.
func (s *Serializer) Encode(v interface{}) ([]byte, error) {
return s.codec.Marshal(v)
}

// Decode deserializes the given data into the specified value using the codec.
func (s *Serializer) Decode(data []byte, v interface{}) error {
return s.codec.Unmarshal(data, v)
}
52 changes: 52 additions & 0 deletions pkg/serialization/serializer_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package serialization_test

import (
"testing"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

"github.com/eigerco/strawberry/pkg/serialization"
"github.com/eigerco/strawberry/pkg/serialization/codec"
)

type PayloadExample struct {
ID int `json:"id"`
Data []byte `json:"data"`
}

func TestJSONSerializer(t *testing.T) {
jsonCodec := &codec.JSONCodec{}
serializer := serialization.NewSerializer(jsonCodec)

example := PayloadExample{ID: 1, Data: []byte{1, 2, 3}}

// Test Encoding
encoded, err := serializer.Encode(&example)
require.NoError(t, err)
require.NotNil(t, encoded)

// Test Decoding
var decoded PayloadExample
err = serializer.Decode(encoded, &decoded)
require.NoError(t, err)
assert.Equal(t, example, decoded)
}

func TestSCALESerializer(t *testing.T) {
scaleCodec := &codec.SCALECodec{}
serializer := serialization.NewSerializer(scaleCodec)

example := PayloadExample{ID: 2, Data: []byte{1, 2, 3}}

// Test Encoding
encoded, err := serializer.Encode(example)
require.NoError(t, err)
require.NotNil(t, encoded)

// Test Decoding
var decoded PayloadExample
err = serializer.Decode(encoded, &decoded)
require.NoError(t, err)
assert.Equal(t, example, decoded)
}

0 comments on commit d405d2f

Please sign in to comment.