Skip to content

Commit

Permalink
Implement text serialization methods (#47)
Browse files Browse the repository at this point in the history
* Implement text serialization methods

* Adds serialization methods
  • Loading branch information
rkodev authored Apr 17, 2023
1 parent 739168f commit a6977f5
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 13 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Changed

## [0.7.1] - 2023-04-17

### Changed

- Implement serialization and parseNode listeners.

## [0.7.0] - 2023-01-23

### Added
Expand Down
14 changes: 9 additions & 5 deletions text_parse_node.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ import (

// TextParseNode is a ParseNode implementation for JSON.
type TextParseNode struct {
value string
value string
onBeforeAssignFieldValues absser.ParsableAction
onAfterAssignFieldValues absser.ParsableAction
}

// NewTextParseNode creates a new TextParseNode.
Expand Down Expand Up @@ -251,20 +253,22 @@ func (n *TextParseNode) GetRawValue() (interface{}, error) {

// GetOnBeforeAssignFieldValues returns a ByteArray value from the nodes.
func (n *TextParseNode) GetOnBeforeAssignFieldValues() absser.ParsableAction {
return nil
return n.onBeforeAssignFieldValues
}

// SetOnBeforeAssignFieldValues returns a ByteArray value from the nodes.
func (n *TextParseNode) SetOnBeforeAssignFieldValues(action absser.ParsableAction) error {
return UnsupportedMethodError
n.onBeforeAssignFieldValues = action
return nil
}

// GetOnAfterAssignFieldValues returns a ByteArray value from the nodes.
func (n *TextParseNode) GetOnAfterAssignFieldValues() absser.ParsableAction {
return nil
return n.onAfterAssignFieldValues
}

// SetOnAfterAssignFieldValues returns a ByteArray value from the nodes.
func (n *TextParseNode) SetOnAfterAssignFieldValues(action absser.ParsableAction) error {
return UnsupportedMethodError
n.onAfterAssignFieldValues = action
return nil
}
12 changes: 12 additions & 0 deletions text_parse_node_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,16 @@ func TestTextParseNodeHonoursInterface(t *testing.T) {
instance, err := NewTextParseNode(sourceArray)
assert.Nil(t, err)
assert.Implements(t, (*absser.ParseNode)(nil), instance)

action := func(parsable absser.Parsable) error {
return nil
}

err = instance.SetOnBeforeAssignFieldValues(action)
assert.NoError(t, err)
assert.NotNil(t, instance.GetOnBeforeAssignFieldValues())

err = instance.SetOnAfterAssignFieldValues(action)
assert.NoError(t, err)
assert.NotNil(t, instance.GetOnAfterAssignFieldValues())
}
21 changes: 13 additions & 8 deletions text_serialization_writer.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,13 @@ import (

var NoStructuredDataError = errors.New("text does not support structured data")
var OnlyOneValue = errors.New("text serialization writer can only write one value")
var UnsupportedMethodError = errors.New("text does not support current method")

// TextSerializationWriter implements SerializationWriter for JSON.
type TextSerializationWriter struct {
writer []string
writer []string
onBeforeAssignFieldValues absser.ParsableAction
onAfterAssignFieldValues absser.ParsableAction
onStartObjectSerialization absser.ParsableWriter
}

// NewTextSerializationWriter creates a new instance of the TextSerializationWriter.
Expand Down Expand Up @@ -257,25 +259,28 @@ func (w *TextSerializationWriter) WriteNullValue(key string) error {
}

func (w *TextSerializationWriter) GetOnBeforeSerialization() absser.ParsableAction {
return nil
return w.onBeforeAssignFieldValues
}

func (w *TextSerializationWriter) SetOnBeforeSerialization(action absser.ParsableAction) error {
return UnsupportedMethodError
w.onBeforeAssignFieldValues = action
return nil
}

func (w *TextSerializationWriter) GetOnAfterObjectSerialization() absser.ParsableAction {
return nil
return w.onAfterAssignFieldValues
}

func (w *TextSerializationWriter) SetOnAfterObjectSerialization(action absser.ParsableAction) error {
return UnsupportedMethodError
w.onAfterAssignFieldValues = action
return nil
}

func (w *TextSerializationWriter) GetOnStartObjectSerialization() absser.ParsableWriter {
return nil
return w.onStartObjectSerialization
}

func (w *TextSerializationWriter) SetOnStartObjectSerialization(writer absser.ParsableWriter) error {
return UnsupportedMethodError
w.onStartObjectSerialization = writer
return nil
}
31 changes: 31 additions & 0 deletions text_serialization_writer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,34 @@ func TestSerializationWriterHonoursInterface(t *testing.T) {
instance := NewTextSerializationWriter()
assert.Implements(t, (*absser.SerializationWriter)(nil), instance)
}

func TestTextSerializationWriter(t *testing.T) {
serializer := NewTextSerializationWriter()
countBefore := 0
onBefore := func(parsable absser.Parsable) error {
countBefore++
return nil
}
err := serializer.SetOnBeforeSerialization(onBefore)
assert.NoError(t, err)
assert.NotNil(t, serializer.GetOnBeforeSerialization())

countAfter := 0
onAfter := func(parsable absser.Parsable) error {
countAfter++
return nil
}
err = serializer.SetOnAfterObjectSerialization(onAfter)
assert.NoError(t, err)
assert.NotNil(t, serializer.GetOnAfterObjectSerialization())

countStart := 0
onStart := func(absser.Parsable, absser.SerializationWriter) error {
countStart++
return nil
}

err = serializer.SetOnStartObjectSerialization(onStart)
assert.NoError(t, err)
assert.NotNil(t, serializer.GetOnStartObjectSerialization())
}

0 comments on commit a6977f5

Please sign in to comment.