Просмотр исходного кода

Call setter on explicitly quoted strings.

Fixes #7.
Gustavo Niemeyer 12 лет назад
Родитель
Сommit
81205292ab
2 измененных файлов с 7 добавлено и 4 удалено
  1. 4 3
      decode.go
  2. 3 1
      decode_test.go

+ 4 - 3
decode.go

@@ -283,12 +283,13 @@ func (d *decoder) scalar(n *node, out reflect.Value) (good bool) {
 	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:

+ 3 - 1
decode_test.go

@@ -435,6 +435,8 @@ var setterTests = []struct {
 	{"_: [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 @@ func (s *S) TestUnmarshalWithFalseSetterIgnoresValue(c *C) {
 	}()
 
 	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)