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() {
case reflect.Bool:
return d.decodeBool(name, n, result)
case reflect.Int:
return d.decodeInt(name, n, result)
case reflect.Interface:
@ -74,6 +76,22 @@ func (d *decoder) decode(name string, n ast.Node, result reflect.Value) error {
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 {
n, ok := raw.(ast.LiteralNode)
if !ok {
@ -129,6 +147,9 @@ func (d *decoder) decodeInterface(name string, raw ast.Node, result reflect.Valu
set = reflect.ValueOf(result)
case ast.LiteralNode:
switch n.Type {
case ast.ValueTypeBool:
var result bool
set = reflect.Indirect(reflect.New(reflect.TypeOf(result)))
case ast.ValueTypeInt:
var result int
set = reflect.Indirect(reflect.New(reflect.TypeOf(result)))