-
Notifications
You must be signed in to change notification settings - Fork 2
/
main.go
67 lines (55 loc) · 1.45 KB
/
main.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
package main
import (
"bytes"
"go/ast"
"go/parser"
"go/token"
"sort"
"strings"
"github.com/go-courier/codegen"
)
func main() {
fset := token.NewFileSet()
f, _ := parser.ParseFile(fset, "strfmt.go", nil, parser.ParseComments)
file := codegen.NewFile("strfmt", "strfmt_validators.go")
constNames := make([]string, 0)
for key, obj := range f.Scope.Objects {
if obj.Kind == ast.Con {
constNames = append(constNames, key)
}
}
sort.Strings(constNames)
for _, constName := range constNames {
name := bytes.Replace([]byte(constName), []byte("regexpString"), []byte(""), 1)
validatorName := strings.Replace(codegen.LowerSnakeCase(string(name)), "_", "-", -1)
validatorAlias := codegen.LowerCamelCase(string(name))
args := []codegen.Snippet{
codegen.Id(constName),
codegen.Val(validatorName),
}
if validatorName != validatorAlias {
args = append(args, codegen.Val(validatorAlias))
}
file.WriteBlock(
codegen.Expr(`func init() { ? }`,
codegen.Sel(
codegen.Id(file.Use("github.com/go-courier/validator", "ValidatorMgrDefault")),
codegen.Call(
"Register",
codegen.Id(codegen.UpperCamelCase(string(name))+"Validator"),
),
),
),
)
file.WriteBlock(
codegen.Expr("var ? = ?",
codegen.Id(codegen.UpperCamelCase(string(name))+"Validator"),
codegen.Call(
file.Use("github.com/go-courier/validator", "NewRegexpStrfmtValidator"),
args...,
),
),
)
}
file.WriteFile()
}