diff --git a/decoder.go b/decoder.go index 08634fc..1b3125e 100644 --- a/decoder.go +++ b/decoder.go @@ -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)))