| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- package lorca
- import "encoding/json"
- // Value is a generic type of a JSON value (primitive, object, array) and
- // optionally an error value.
- type Value interface {
- Err() error
- To(interface{}) error
- Float() float32
- Int() int
- String() string
- Bool() bool
- Object() map[string]Value
- Array() []Value
- Bytes() []byte
- }
- type value struct {
- err error
- raw json.RawMessage
- }
- func (v value) Err() error { return v.err }
- func (v value) Bytes() []byte { return v.raw }
- func (v value) To(x interface{}) error { return json.Unmarshal(v.raw, x) }
- func (v value) Float() (f float32) { v.To(&f); return f }
- func (v value) Int() (i int) { v.To(&i); return i }
- func (v value) String() (s string) { v.To(&s); return s }
- func (v value) Bool() (b bool) { v.To(&b); return b }
- func (v value) Array() (values []Value) {
- array := []json.RawMessage{}
- v.To(&array)
- for _, el := range array {
- values = append(values, value{raw: el})
- }
- return values
- }
- func (v value) Object() (object map[string]Value) {
- object = map[string]Value{}
- kv := map[string]json.RawMessage{}
- v.To(&kv)
- for k, v := range kv {
- object[k] = value{raw: v}
- }
- return object
- }
|