-
Notifications
You must be signed in to change notification settings - Fork 0
/
generate.go
66 lines (61 loc) · 1.68 KB
/
generate.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
package generator
import "github.com/wlMalk/goms/generator/file"
var builtInGenerators []GeneratorOption = []GeneratorOption{
DockerfileFileSpec,
ProtoBufServiceDefinitionsFileSpec,
ServiceMainFileSpec,
ServiceStartCMDFileSpec,
CachingMiddlewareFileSpec,
ConvertersFileSpec,
HandlersFileSpec,
ServiceImplementationFileSpec,
ServiceImplementationValidatorFileSpec,
ServiceImplementationMiddlewareFileSpec,
CachingKeyerFileSpec,
LoggingMiddlewareFileSpec,
ServiceMiddlewareFileSpec,
RecoveringMiddlewareFileSpec,
ServiceTransportEndpointsFileSpec,
ValidatingMiddlewareFileSpec,
GRPCClientFileSpec,
GlobalGRPCClientFileSpec,
GRPCDecodersFileSpec,
GRPCEncodersFileSpec,
GRPCServerFileSpec,
HTTPClientFileSpec,
GlobalHTTPClientFileSpec,
HTTPDecodersFileSpec,
HTTPEncodersFileSpec,
HTTPRequestsFileSpec,
HTTPResponsesFileSpec,
HTTPServerFileSpec,
ProtoRequestsConvertersFileSpec,
ProtoResponsesConvertersFileSpec,
RequestsFileSpec,
ResponseFileSpec,
ServiceTypesDefinitionsFileSpec,
}
var builtInFileCreators []GeneratorOption = []GeneratorOption{
GeneratorOption(func(generator *Generator) {
generator.AddCreator("go", GoFileCreator)
}),
GeneratorOption(func(generator *Generator) {
generator.AddCreator("proto", ProtoFileCreator)
}),
GeneratorOption(func(generator *Generator) {
generator.AddCreator("Dockerfile", TextFileCreator(""))
}),
}
func Default(opts ...GeneratorOption) *Generator {
return New(append(append(builtInGenerators, builtInFileCreators...), opts...)...)
}
func New(opts ...GeneratorOption) *Generator {
g := &Generator{
creators: map[string]file.Creator{},
specs: map[string]file.Spec{},
}
for _, opt := range opts {
opt(g)
}
return g
}