diff --git a/targets.go b/targets.go index 0024264..baad5c4 100644 --- a/targets.go +++ b/targets.go @@ -516,11 +516,10 @@ func scopeStruct(v reflect.Value, name string) (target, bool, error) { l := len(path) path = append(path, i) f := t.Field(i) - if f.PkgPath != "" { - // only consider exported fields - } else if f.Anonymous { + if f.Anonymous { walk(v.Field(i)) - } else { + } else if f.PkgPath == "" { + // only consider exported fields fieldName, ok := f.Tag.Lookup("toml") if !ok { fieldName = f.Name diff --git a/unmarshaler_test.go b/unmarshaler_test.go index aad04e8..8d742f0 100644 --- a/unmarshaler_test.go +++ b/unmarshaler_test.go @@ -931,3 +931,19 @@ func TestIssue287(t *testing.T) { } require.Equal(t, expected, v) } + +func TestIssue508(t *testing.T) { + type head struct { + Title string `toml:"title"` + } + type text struct { + head + } + + var b = []byte(`title = "This is a title"`) + + t1 := text{} + err := toml.Unmarshal(b, &t1) + require.NoError(t, err) + require.Equal(t, "This is a title", t1.head.Title) +}