json/model/node.go

45 lines
714 B
Go
Raw Normal View History

2022-11-16 05:11:19 +03:00
package model
// Node of JSON tree
2022-11-21 04:31:56 +03:00
type Node interface {
Type() NodeType
MarshalJSON() ([]byte, error)
2022-11-21 04:46:32 +03:00
Set(v any) error
2022-11-16 05:11:19 +03:00
}
// NewNode creates new node from value
2022-11-21 04:31:56 +03:00
func NewNode(value any) Node {
2022-12-04 16:02:03 +03:00
if value, ok := value.(Node); ok {
return value
}
2022-11-16 05:11:19 +03:00
switch value := value.(type) {
case string:
2022-11-21 04:31:56 +03:00
return &StringNode{
Value: value,
}
2022-11-16 05:11:19 +03:00
case float64:
2022-11-21 04:31:56 +03:00
return &NumberNode{
Value: value,
}
2022-11-16 05:11:19 +03:00
case int:
2022-11-21 04:31:56 +03:00
return &NumberNode{
Value: float64(value),
}
2022-11-16 05:11:19 +03:00
case NodeObjectValue:
2022-11-21 04:31:56 +03:00
return &ObjectNode{
Value: value,
2022-12-04 16:02:03 +03:00
Meta: make(map[string]any),
2022-11-21 03:45:23 +03:00
}
2022-11-16 05:11:19 +03:00
case NodeArrayValue:
2022-11-21 04:31:56 +03:00
return &ArrayNode{
Value: value,
2022-11-16 05:11:19 +03:00
}
2022-11-21 04:31:56 +03:00
case bool:
return &BooleanNode{
Value: value,
2022-11-16 21:35:48 +03:00
}
default:
2022-11-21 04:31:56 +03:00
return NullNode{}
2022-11-16 21:35:48 +03:00
}
}