diff options
author | NeonXP <i@neonxp.dev> | 2022-11-16 21:35:48 +0300 |
---|---|---|
committer | NeonXP <i@neonxp.dev> | 2022-11-16 21:35:48 +0300 |
commit | eb26d597c6d526f84077afdc141b0a5d585c7da3 (patch) | |
tree | a07e5e4c79e3217afb87877287315bb8590b989f /model/node.go | |
parent | c730afe0f889587630789c4fa38267d1edf465f2 (diff) |
Utility methodsv0.0.1
Diffstat (limited to 'model/node.go')
-rw-r--r-- | model/node.go | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/model/node.go b/model/node.go index 1483eaf..fea8fcd 100644 --- a/model/node.go +++ b/model/node.go @@ -113,3 +113,33 @@ func (n *Node) MarshalJSON() ([]byte, error) { return []byte("null"), nil } } + +// Merge two object or array nodes +func (n *Node) Merge(node *Node) error { + if n.Type != node.Type { + return fmt.Errorf("can't merge nodes of different types") + } + switch n.Type { + case ObjectNode: + for k, v := range node.objectValue { + n.objectValue[k] = v + } + case ArrayNode: + n.arrayValue = append(n.arrayValue, node.arrayValue...) + default: + return fmt.Errorf("merge not implemented for type %s", n.Type) + } + return nil +} + +// Len returns length of object or array nodes +func (n *Node) Len() (int, error) { + switch n.Type { + case ObjectNode: + return len(n.objectValue), nil + case ArrayNode: + return len(n.arrayValue), nil + default: + return 0, fmt.Errorf("merge not implemented for type %s", n.Type) + } +} |