| 108 | } |
| 109 | |
| 110 | func field(s *Struct, f IndexOrName) (Field, int) { |
| 111 | var i int |
| 112 | switch f := f.(type) { |
| 113 | case int: |
| 114 | i = f |
| 115 | case string: |
| 116 | var ok bool |
| 117 | if i, ok = s.fieldIndices[f]; !ok { |
| 118 | fail("%v does not contain a field with name '%v':\n%+v", s.TypeName(), f, s) |
| 119 | } |
| 120 | default: |
| 121 | fail("Attempted to index field of struct '%v' with %T. Must be int or string", s.TypeName(), f) |
| 122 | } |
| 123 | return s.fields[i], i |
| 124 | } |
| 125 | |
| 126 | func (b *Builder) pathName(rootName string, path []ValueIndexOrName) string { |
| 127 | name := rootName |