11package  jsonast
22
3- import  (
4- 	"encoding/json" 
5- )
6- 
73// Value is a generic node in a JSON AST. This implements fmt.Stringer 
84type  Value  interface  {
9- 	// Walk creates a walker, which is capable of walking the JSON 
10- 	// tree with a few function calls 
11- 	Walk () Walker 
125	// IsString returns true if the data at this node is a string 
136	IsString () bool 
147	// IsNumber returns true if the data at this node is numeric 
@@ -23,91 +16,18 @@ type Value interface {
2316	IsNull () bool 
2417}
2518
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 
10926}
11027
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