1
1
package jsonast
2
2
3
- import (
4
- "encoding/json"
5
- )
6
-
7
3
// Value is a generic node in a JSON AST. This implements fmt.Stringer
8
4
type Value interface {
9
- // Walk creates a walker, which is capable of walking the JSON
10
- // tree with a few function calls
11
- Walk () Walker
12
5
// IsString returns true if the data at this node is a string
13
6
IsString () bool
14
7
// IsNumber returns true if the data at this node is numeric
@@ -23,91 +16,18 @@ type Value interface {
23
16
IsNull () bool
24
17
}
25
18
26
- type value struct {
27
- b []byte
28
- cur interface {}
29
- }
30
-
31
- // ValueFromBytes decodes b into a Value, or returns an error if b is invalid
32
- // json
33
- func ValueFromBytes (b []byte ) (Value , error ) {
34
- var iface interface {}
35
- if err := json .Unmarshal (b , & iface ); err != nil {
36
- return nil , err
37
- }
38
- return & value {cur : iface , b : b }, nil
39
- }
40
-
41
- func valueFromIface (i interface {}) (Value , error ) {
42
- b , err := json .Marshal (i )
43
- if err != nil {
44
- return nil , err
45
- }
46
- return & value {b : b , cur : i }, nil
47
- }
48
-
49
- func (v * value ) Bytes () []byte {
50
- return v .b
51
- }
52
-
53
- // func (v *value) String() string {
54
- // return string(v.b)
55
- // }
56
-
57
- func (v * value ) IsString () bool {
58
- return isString (v .cur )
59
- }
60
-
61
- // func (v *value) StringVal() (String, error) {
62
- // return newString(v)
63
- // }
64
-
65
- func (v * value ) IsNumber () bool {
66
- return isNumber (v .cur )
67
- }
68
-
69
- // func (v *value) NumberVal() (Number, error) {
70
- // return newNumber(v)
71
- // }
72
-
73
- func (v * value ) IsBool () bool {
74
- return isBool (v )
75
- }
76
-
77
- // func (v *value) BoolVal() (Bool, error) {
78
- // if !v.IsBool() {
79
- // return nil, errNotABool
80
- // }
81
- // return newBool(v), nil
82
- // }
83
-
84
- func (v * value ) IsObject () bool {
85
- _ , ok := v .cur .(map [interface {}]interface {})
86
- return ok
87
- }
88
-
89
- // func (v *value) ObjectVal() (Object, error) {
90
- // if !v.IsObject() {
91
- // return nil, errNotAnObject
92
- // }
93
- // return newObject(v)
94
- // }
95
-
96
- func (v * value ) IsArray () bool {
97
- return isArray (v .cur )
98
- }
99
-
100
- // func (v *value) ArrayVal() (Array, error) {
101
- // if !v.IsArray() {
102
- // return nil, errNotAnArray
103
- // }
104
- // return newArray(v)
105
- // }
106
-
107
- func (v * value ) IsNull () bool {
108
- return v .cur == nil
19
+ type valueImpl struct {
20
+ isString bool
21
+ isNumber bool
22
+ isBool bool
23
+ isObject bool
24
+ isArray bool
25
+ isNull bool
109
26
}
110
27
111
- // func (v *value) NullVal() (Null, error) {
112
- // return newNull(v)
113
- // }
28
+ func (v valueImpl ) IsString () bool { return v .isString }
29
+ func (v valueImpl ) IsNumber () bool { return v .isNumber }
30
+ func (v valueImpl ) IsBool () bool { return v .isBool }
31
+ func (v valueImpl ) IsObject () bool { return v .isObject }
32
+ func (v valueImpl ) IsArray () bool { return v .isArray }
33
+ func (v valueImpl ) IsNull () bool { return v .isNull }
0 commit comments