Example #1
0
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))
	}
}
Example #2
0
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
}
Example #3
0
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())
		}
	}
}
Example #4
0
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
}