|
|
@@ -190,6 +190,7 @@ type decoder struct {
|
|
|
aliases map[string]bool
|
|
|
mapType reflect.Type
|
|
|
terrors []string
|
|
|
+ strict bool
|
|
|
}
|
|
|
|
|
|
var (
|
|
|
@@ -199,8 +200,8 @@ var (
|
|
|
ifaceType = defaultMapType.Elem()
|
|
|
)
|
|
|
|
|
|
-func newDecoder() *decoder {
|
|
|
- d := &decoder{mapType: defaultMapType}
|
|
|
+func newDecoder(strict bool) *decoder {
|
|
|
+ d := &decoder{mapType: defaultMapType, strict: strict}
|
|
|
d.aliases = make(map[string]bool)
|
|
|
return d
|
|
|
}
|
|
|
@@ -639,6 +640,8 @@ func (d *decoder) mappingStruct(n *node, out reflect.Value) (good bool) {
|
|
|
value := reflect.New(elemType).Elem()
|
|
|
d.unmarshal(n.children[i+1], value)
|
|
|
inlineMap.SetMapIndex(name, value)
|
|
|
+ } else if d.strict {
|
|
|
+ d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s not found in struct %s", n.line+1, name.String(), out.Type()))
|
|
|
}
|
|
|
}
|
|
|
return true
|