40 lines
610 B
Go
40 lines
610 B
Go
package model
|
|
|
|
// Node of JSON tree
|
|
type Node interface {
|
|
Type() NodeType
|
|
MarshalJSON() ([]byte, error)
|
|
}
|
|
|
|
// NewNode creates new node from value
|
|
func NewNode(value any) Node {
|
|
switch value := value.(type) {
|
|
case string:
|
|
return &StringNode{
|
|
Value: value,
|
|
}
|
|
case float64:
|
|
return &NumberNode{
|
|
Value: value,
|
|
}
|
|
case int:
|
|
return &NumberNode{
|
|
Value: float64(value),
|
|
}
|
|
case NodeObjectValue:
|
|
return &ObjectNode{
|
|
Value: value,
|
|
}
|
|
case NodeArrayValue:
|
|
return &ArrayNode{
|
|
Value: value,
|
|
}
|
|
case bool:
|
|
return &BooleanNode{
|
|
Value: value,
|
|
}
|
|
default:
|
|
return NullNode{}
|
|
}
|
|
}
|