-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.go
122 lines (96 loc) · 2.78 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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package main
import (
"embed"
"flag"
"path"
log "github.com/sirupsen/logrus"
"openapigenerator/buildgo"
"openapigenerator/buildphp"
"openapigenerator/helper"
"github.com/getkin/kin-openapi/openapi3"
)
var GenerateFolder = ""
var ProjectName = ""
var ApiFile = ""
var ListenPort = ""
var BuildLang = ""
var OverrideFile = "false"
//go:embed templates
var embedfs embed.FS
func main() {
flag.StringVar(&BuildLang, "lang", "go", "Build language (go/php)")
flag.StringVar(&GenerateFolder, "targetfolder", "../openapiserverfolder", "Generate Folder to which folder")
flag.StringVar(&ProjectName, "projectname", "openapiserver", "Rest API GO project name")
flag.StringVar(&ApiFile, "apifile", "spec.yaml", "openapi v3 yaml file")
flag.StringVar(&ListenPort, "port", ":9000", "listen to which port, default: 9000")
flag.StringVar(&OverrideFile, "override", "false", "Override main.go and routehandle.go if exists, default false")
flag.Parse()
helper.SetEmbedFiles(embedfs)
helper.Proj.ApiFile = ApiFile
helper.Proj.ListenPort = ListenPort
helper.Proj.BuildLang = BuildLang
helper.Proj.GenerateFolder = GenerateFolder
helper.Proj.ProjectFullName = ProjectName
helper.Proj.ProjectName = path.Base(ProjectName)
helper.Proj.AllExistsHandles = map[string]bool{}
helper.Proj.AllEnvVars = map[string]string{
"API_LISTEN": ":" + helper.Proj.ListenPort,
"SWAGGERUI": "true",
"GIN_MODE": "debug", // or release
}
if OverrideFile == "true" {
helper.Proj.OverrideHandle = true
} else {
helper.Proj.OverrideHandle = false
}
log.SetLevel(log.DebugLevel)
GenerateCode(ApiFile)
}
func GenerateCode(ApiFile string) {
doc, err := openapi3.NewLoader().LoadFromFile(ApiFile)
if err != nil {
log.Fatal(err)
}
extenvalues := doc.ExtensionProps.Extensions
// bson.M(extenvalues)
for extendname, extendvalue := range extenvalues {
if extendname == "x-env-vars" {
helper.DefineEnvVarExists(extendvalue)
} else if extendname == "x-operationId-exists" {
helper.DefineRouteHandleExists(extendvalue)
} else {
log.Warn("Unsupported extension value: ", extendvalue)
}
}
helper.PrepareObjects(doc)
/*
*/
// helper.ReadRoutes(doc)
// helper.ReadComponents(doc)
switch BuildLang {
case "go":
buildgo.Generate(doc)
case "php":
buildphp.Generate(doc)
default:
log.Fatal("only 'go' is supported at the moment")
// buildphp.Generate("")
}
}
// func ReadSchema() {
// }
// func PrepareInfra(doc *openapi3.T) {
// switch BuildLang {
// case "go":
// buildgo.WriteInfra() //Generate(doc)
// buildgo.PrepareRoutes(doc)
// buildgo.PrepareRouteHandles(doc)
// case "php":
// // buildphp.PrepareInfra() //Generate(doc)
// // case "typescript":
// // case "java":
// // buildphp.Generate(doc)
// default:
// fmt.Println(BuildLang + " build is not supported")
// }
// }