Call setter on explicitly quoted strings.
Fixes #7.
diff --git a/decode.go b/decode.go
index fd1ff96..75a2c42 100644
--- a/decode.go
+++ b/decode.go
@@ -283,12 +283,13 @@
var tag string
var resolved interface{}
if n.tag == "" && !n.implicit {
+ tag = "!!str"
resolved = n.value
} else {
tag, resolved = resolve(n.tag, n.value)
- if set := d.setter(tag, &out, &good); set != nil {
- defer set()
- }
+ }
+ if set := d.setter(tag, &out, &good); set != nil {
+ defer set()
}
switch out.Kind() {
case reflect.String:
diff --git a/decode_test.go b/decode_test.go
index 224e369..55db804 100644
--- a/decode_test.go
+++ b/decode_test.go
@@ -435,6 +435,8 @@
{"_: [1,A]", "!!seq", []interface{}{1, "A"}},
{"_: 10", "!!int", 10},
{"_: null", "!!null", nil},
+ {`_: BAR!`, "!!str", "BAR!"},
+ {`_: "BAR!"`, "!!str", "BAR!"},
{"_: !!foo 'BAR!'", "!!foo", "BAR!"},
}
@@ -491,7 +493,7 @@
}()
m := map[string]*typeWithSetter{}
- data := "{abc: 1, def: 2, ghi: 3, jkl: 4}"
+ data := `{abc: 1, def: 2, ghi: 3, jkl: 4}`
err := yaml.Unmarshal([]byte(data), m)
c.Assert(err, IsNil)
c.Assert(m["abc"], NotNil)