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)