This repository has been archived by the owner on Apr 22, 2024. It is now read-only.
/
fields.go
84 lines (69 loc) · 1.46 KB
/
fields.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package generator
import (
"go/ast"
"strings"
)
func prepareFields(
includeAllParsedFields bool,
desiredFields FieldsInput,
parsedFields ParsedFields,
imports Imports,
) Fields {
result := Fields{}
for _, f := range parsedFields {
desired, found := desiredFields.findByOriginalName(f.Name())
if !found && !includeAllParsedFields {
continue
}
var usedImports Imports
if desired.OverrideTypeTo == "" {
usedImports = determineUsedImports(f.Type(), imports)
}
result = append(result, Field{
name: f.Name(),
renameTo: desired.RenameTo,
_type: f.Type(),
overrideType: desired.OverrideTypeTo,
imports: usedImports,
})
}
return result
}
type Fields []Field
type Field struct {
name string
renameTo string
_type ast.Expr
overrideType string
imports Imports
}
func (fs Fields) RequiredImports() Imports {
result := Imports{}
for _, f := range fs {
for _, i := range f.imports {
if !result.Has(i) {
result = append(result, i)
}
}
}
return result
}
func (f Field) Type() ast.Expr {
return f._type
}
func (f Field) OverrideTypeTo() string {
return f.overrideType
}
// OriginalName Returns name of a field as it was parsed from source.
func (f Field) OriginalName() string {
return f.name
}
func (f Field) DesiredName() string {
if f.renameTo != "" {
return f.renameTo
}
if !ast.IsExported(f.name) {
return strings.ToUpper(f.name[:1]) + f.name[1:]
}
return f.name
}