func (p *exporter) fieldList(t *types.Struct) { if trace && t.NumFields() > 0 { p.tracef("fields {>\n") defer p.tracef("<\n} ") } p.int(t.NumFields()) for i := 0; i < t.NumFields(); i++ { if trace && i > 0 { p.tracef("\n") } p.field(t.Field(i)) p.string(t.Tag(i)) } }
func (c *converter) convertStruct(v *gotypes.Struct) *types.Struct { if v == nil { return nil } if v, ok := c.converted[v]; ok { return v.(*types.Struct) } fields := make([]*types.Var, 0, v.NumFields()) tags := make([]string, 0, v.NumFields()) for i := 0; i < v.NumFields(); i++ { fields = append(fields, c.convertVar(v.Field(i))) tags = append(tags, v.Tag(i)) } ret := types.NewStruct(fields, tags) c.converted[v] = ret return ret }
func collectFields(fields map[string]string, struc *types.Struct) { // TODO: for i := 0; i < struc.NumFields(); i++ { f, tag := struc.Field(i), struc.Tag(i) switch { case f.Anonymous(): if named, ok := f.Type().(*types.Named); ok { if struc_, ok := named.Underlying().(*types.Struct); ok { collectFields(fields, struc_) } } case strings.Contains(tag, `pretty:""`): fields[f.Name()] = inflect.Underscore(f.Name()) } } }
func collectFields(struc *types.Struct) []string { result := []string{} for i := 0; i < struc.NumFields(); i++ { f, tag := struc.Field(i), struc.Tag(i) switch { case f.Anonymous(): if named, ok := f.Type().(*types.Named); ok { if struc_, ok := named.Underlying().(*types.Struct); ok { result = append(result, collectFields(struc_)...) } } case strings.Contains(tag, `pretty:""`): result = append(result, f.Name()) } } return result }