support decoding bools
This commit is contained in:
parent
0d84234df1
commit
bc2f8e57ee
21
decoder.go
21
decoder.go
@ -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)))
|
||||||
|
Loading…
Reference in New Issue
Block a user