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-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-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
|
|
|
}
|
|
|
|
}
|