support decoding bools

This commit is contained in:
Mitchell Hashimoto 2014-08-04 22:25:59 -07:00
parent 0d84234df1
commit bc2f8e57ee

View File

@ -51,6 +51,8 @@ func (d *decoder) decode(name string, n ast.Node, result reflect.Value) error {
} }
switch k.Kind() { switch k.Kind() {
case reflect.Bool:
return d.decodeBool(name, n, result)
case reflect.Int: case reflect.Int:
return d.decodeInt(name, n, result) return d.decodeInt(name, n, result)
case reflect.Interface: case reflect.Interface:
@ -74,6 +76,22 @@ func (d *decoder) decode(name string, n ast.Node, result reflect.Value) error {
return nil return nil
} }
func (d *decoder) decodeBool(name string, raw ast.Node, result reflect.Value) error {
n, ok := raw.(ast.LiteralNode)
if !ok {
return fmt.Errorf("%s: not a literal type", name)
}
switch n.Type {
case ast.ValueTypeBool:
result.Set(reflect.ValueOf(n.Value.(bool)))
default:
return fmt.Errorf("%s: unknown type %s", name, n.Type)
}
return nil
}
func (d *decoder) decodeInt(name string, raw ast.Node, result reflect.Value) error { func (d *decoder) decodeInt(name string, raw ast.Node, result reflect.Value) error {
n, ok := raw.(ast.LiteralNode) n, ok := raw.(ast.LiteralNode)
if !ok { if !ok {
@ -129,6 +147,9 @@ func (d *decoder) decodeInterface(name string, raw ast.Node, result reflect.Valu
set = reflect.ValueOf(result) set = reflect.ValueOf(result)
case ast.LiteralNode: case ast.LiteralNode:
switch n.Type { switch n.Type {
case ast.ValueTypeBool:
var result bool
set = reflect.Indirect(reflect.New(reflect.TypeOf(result)))
case ast.ValueTypeInt: case ast.ValueTypeInt:
var result int var result int
set = reflect.Indirect(reflect.New(reflect.TypeOf(result))) set = reflect.Indirect(reflect.New(reflect.TypeOf(result)))