Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
46 lines (41 sloc) 1.09 KB
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
}
type value struct {
err error
raw json.RawMessage
}
func (v value) Err() error { return v.err }
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
}
You can’t perform that action at this time.