diff --git a/decoder.go b/decoder.go index 2fcac72..3ebfbbe 100644 --- a/decoder.go +++ b/decoder.go @@ -1,6 +1,7 @@ package hcl import ( + "errors" "fmt" "reflect" "sort" @@ -27,8 +28,13 @@ func Decode(out interface{}, in string) error { // DecodeObject is a lower-level version of Decode. It decodes a // raw Object into the given output. func DecodeObject(out interface{}, n *hcl.Object) error { + val := reflect.ValueOf(out) + if val.Kind() != reflect.Ptr { + return errors.New("result must be a pointer") + } + var d decoder - return d.decode("root", n, reflect.ValueOf(out).Elem()) + return d.decode("root", n, val.Elem()) } type decoder struct { diff --git a/decoder_test.go b/decoder_test.go index 3a488c0..7c7700b 100644 --- a/decoder_test.go +++ b/decoder_test.go @@ -425,6 +425,14 @@ func TestDecode_structureMap(t *testing.T) { } } +func TestDecode_interfaceNonPointer(t *testing.T) { + var value interface{} + err := Decode(value, testReadFile(t, "basic_int_string.hcl")) + if err == nil { + t.Fatal("should error") + } +} + func TestDecode_intString(t *testing.T) { var value struct { Count int