/* * Copyright 2022 CloudWeGo Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package generator import "path/filepath" //-----------------------------------Default Layout----------------------------------------- const ( sp = string(filepath.Separator) defaultBizDir = "biz" defaultModelDir = "biz" + sp + "model" defaultHandlerDir = "biz" + sp + "handler" defaultServiceDir = "biz" + sp + "service" defaultDalDir = "biz" + sp + "dal" defaultScriptDir = "script" defaultConfDir = "conf" defaultRouterDir = "biz" + sp + "router" defaultClientDir = "biz" + sp + "client" ) const ( routerGenIndex = 8 routerIndex = 9 RegisterFile = "router_gen.go" ) var defaultLayoutConfig = TemplateConfig{ Layouts: []Template{ { Path: defaultDalDir + sp, }, { Path: defaultHandlerDir + sp, }, { Path: defaultModelDir + sp, }, { Path: defaultServiceDir + sp, }, { Path: "main.go", Body: `// Code generated by hertz generator. package main import ( "github.com/cloudwego/hertz/pkg/app/server" ) func main() { h := server.Default() register(h) h.Spin() } `, }, { Path: "go.mod", Delims: [2]string{"{{", "}}"}, Body: `module {{.GoModule}} {{- if .UseApacheThrift}} replace github.com/apache/thrift => github.com/apache/thrift v0.13.0 {{- end}} `, }, { Path: ".gitignore", Body: `*.o *.a *.so _obj _test *.[568vq] [568vq].out *.cgo1.go *.cgo2.c _cgo_defun.c _cgo_gotypes.go _cgo_export.* _testmain.go *.exe *.exe~ *.test *.prof *.rar *.zip *.gz *.psd *.bmd *.cfg *.pptx *.log *nohup.out *settings.pyc *.sublime-project *.sublime-workspace !.gitkeep .DS_Store /.idea /.vscode /output *.local.yml dumped_hertz_remote_config.json `, }, { Path: defaultHandlerDir + sp + "ping.go", Body: `// Code generated by hertz generator. package {{.HandlerPkg}} import ( "context" "github.com/cloudwego/hertz/pkg/app" "github.com/cloudwego/hertz/pkg/common/utils" "github.com/cloudwego/hertz/pkg/protocol/consts" ) // Ping . func Ping(ctx context.Context, c *app.RequestContext) { c.JSON(consts.StatusOK, utils.H{ "message": "pong", }) } `, }, { Path: RegisterFile, Body: `// Code generated by hertz generator. DO NOT EDIT. package main import ( "github.com/cloudwego/hertz/pkg/app/server" router "{{.RouterPkgPath}}" ) // register registers all routers. func register(r *server.Hertz) { router.GeneratedRegister(r) customizedRegister(r) } `, }, { Path: "router.go", Body: `// Code generated by hertz generator. package main import ( "github.com/cloudwego/hertz/pkg/app/server" handler "{{.HandlerPkgPath}}" ) // customizeRegister registers customize routers. func customizedRegister(r *server.Hertz){ r.GET("/ping", handler.Ping) // your code ... } `, }, { Path: defaultRouterDir + sp + registerTplName, Body: `// Code generated by hertz generator. DO NOT EDIT. package {{.RouterPkg}} import ( "github.com/cloudwego/hertz/pkg/app/server" ) // GeneratedRegister registers routers generated by IDL. func GeneratedRegister(r *server.Hertz){ ` + insertPointNew + ` } `, }, { Path: "build.sh", Body: `#!/bin/bash RUN_NAME={{.ServiceName}} mkdir -p output/bin cp script/* output 2>/dev/null chmod +x output/bootstrap.sh go build -o output/bin/${RUN_NAME}`, }, { Path: defaultScriptDir + sp + "bootstrap.sh", Body: `#!/bin/bash CURDIR=$(cd $(dirname $0); pwd) BinaryName={{.ServiceName}} echo "$CURDIR/bin/${BinaryName}" exec $CURDIR/bin/${BinaryName}`, }, }, }