Skip to content

Commit 01bcbe6

Browse files
committed
更新
1 parent 0d4a7f9 commit 01bcbe6

File tree

10 files changed

+185
-37
lines changed

10 files changed

+185
-37
lines changed

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
build:
2+
go build ./cmd/h2o/h2o.go
23

34
codemsg:
45
go build ./cmd/h2o/h2o.go

cmd/h2o/h2o.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/antlabs/h2o/codemsg"
99
"github.com/antlabs/h2o/http"
1010
"github.com/antlabs/h2o/pb"
11+
"github.com/antlabs/h2o/transport"
1112
"github.com/antlabs/tostruct/json"
1213
"github.com/antlabs/tostruct/option"
1314
"github.com/antlabs/tostruct/yaml"
@@ -77,6 +78,8 @@ type H2O struct {
7778
HTTP http.HTTP `clop:"subcommand" usage:"gen http code"`
7879
//子命令,生成protobuf
7980
PB pb.Pb `clop:"subcommand" usage:"gen protobuf code"`
81+
//transport
82+
Transport transport.Transport `clop:"subcommand" usage:"transport"`
8083
}
8184

8285
func main() {

pb/pb.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ func (b *Pb) SubMain() {
8282
var typeOut bytes.Buffer
8383
tmplType.Gen(&typeOut)
8484
tmplPb.PbType = typeOut.String()
85-
tmplPb.Func = append(tmplPb.Func, Func{Name: h.Handler, ReqName: h.Req.Name, RespName: h.Resp.Name})
85+
tmplPb.Func = append(tmplPb.Func, Func{RpcName: h.Handler, ReqName: h.Req.Name, RespName: h.Resp.Name})
8686

8787
}
8888

pb/pb.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ message {{.URLName}} {
1212
{{- .PbType}}
1313
service {{.ServiceName}} {
1414
{{- range $value := .Func}}
15-
rpc {{.Name}} ({{.ReqName}}) returns ({{.RespName}});
15+
rpc {{.RpcName}} ({{.ReqName}}) returns ({{.RespName}});
1616
{{- end}}
1717
}
1818

pb/pb_tmpl.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ type PbTmpl struct {
2525
}
2626

2727
type Func struct {
28-
Name string //service名
28+
RpcName string //service名
2929
ReqName string //service 请求参数名
3030
RespName string //service 响应参数名
3131
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package transport
2+
3+
import (
4+
_ "embed"
5+
"html/template"
6+
"io"
7+
//"github.com/Masterminds/sprig"
8+
)
9+
10+
var (
11+
//go:embed gozero_h2o_http_client_logic.tmpl
12+
goZeroH2oHTTPClientLogic string
13+
)
14+
15+
type transportGoZeroHTTPClientTmpl struct {
16+
PackageName string //包名
17+
GoZeroBaseURL string //
18+
HTTPClientBaseURL string //
19+
Func Func //func
20+
}
21+
22+
type Func struct {
23+
RpcName string //service名
24+
ReqName string //service 请求参数名
25+
RespName string //service 响应参数名
26+
}
27+
28+
func newFuncTemplate() *template.Template {
29+
tmpl := goZeroH2oHTTPClientLogic
30+
return template.Must(template.New("h2o-transport-gozero-http-client-tmpl").Parse(tmpl))
31+
}
32+
33+
func (g *transportGoZeroHTTPClientTmpl) Gen(w io.Writer) error {
34+
35+
tmpl := newFuncTemplate()
36+
37+
return tmpl.Execute(w, *g)
38+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package {{.PackageName}}
2+
3+
import (
4+
"context"
5+
6+
"github.com/antlabs/deepcopy"
7+
pb{{.PackageName}} "{{.GoZeroBaseURL}}/{{.PackageName}}"
8+
"{{.HTTPClientBaseURL}}/{{.PackageName}}"
9+
"github.com/zeromicro/go-zero/core/logx"
10+
)
11+
12+
{{- $RpcName := .Func.RpcName}}
13+
{{- $ReqName := .Func.ReqName}}
14+
{{- $RespName := .Func.RespName}}
15+
type {{$RpcName}}Logic struct {
16+
ctx context.Context
17+
svcCtx *svc.ServiceContext
18+
logx.Logger
19+
}
20+
21+
func New{{$RpcName}}Logic(ctx context.Context,svcCtx *svc.ServiceContext) *{{$RpcName}} {
22+
return &{{$RpcName}}{
23+
ctx: ctx,
24+
svcCtx: svcCtx,
25+
Logger: logx.WithContext(ctx),
26+
}
27+
}
28+
29+
func (l *{{$RpcName}}Logic) {{$RpcName}} (in *pb{{$ReqName}}) (*pb{{.PackageName}}.{{$RespName}}, error) {
30+
var req {{.PackageName}}.{{$RpcName}}Req
31+
deepcopy.Copy(&req, in).Do()
32+
resp, err := {{.PackageName}}.{{$RpcName}}Ctx(req)
33+
if err != nil {
34+
return nil, err
35+
}
36+
37+
var out pb{{.PackageName}}{{$RespName}}Resp
38+
deepcopy.Copy(&out, resp).Do()
39+
return out, nil
40+
}
41+

transport/gozero_h2o_logic.tmpl

Lines changed: 0 additions & 34 deletions
This file was deleted.

transport/gozero_tmpl_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package transport
2+
3+
import (
4+
"os"
5+
"testing"
6+
)
7+
8+
func Test_GoZeroHTTPClient(t *testing.T) {
9+
tmpl := transportGoZeroHTTPClientTmpl{PackageName: "users", GoZeroBaseURL: "gitlab.xx/server", HTTPClientBaseURL: "gitlab.xx/client"}
10+
tmpl.Func = Func{RpcName: "CreateUser",
11+
ReqName: "CreateUserReq",
12+
RespName: "CreateUserResp"}
13+
tmpl.Gen(os.Stdout)
14+
}

transport/transport.go

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package transport
2+
3+
import (
4+
"bytes"
5+
"fmt"
6+
"os"
7+
8+
"github.com/antlabs/h2o/internal/save"
9+
"github.com/antlabs/h2o/parser"
10+
)
11+
12+
const (
13+
goZero = "go-zero"
14+
httpClient = "h2o-http-client"
15+
)
16+
17+
// 这是主模块
18+
// TransportTmpl模块,就是选用一种服务端接入数据,然后选用一种客户端把数据发走
19+
type Transport struct {
20+
// 来自哪个服务端
21+
FromType string `clop:"long" usage:"server template type" default:"go-zero"`
22+
// 推到哪个客户端
23+
ToType string `clop:"long" usage:"client template type" default:"h2o-http-client"`
24+
// 设置服务端包的基本url
25+
FromBaseURL string `clop:"--from-base-url" usage:"from base url"`
26+
// 设置客户端包的基本url
27+
ToBaseURL string `clop:"--to-base-url" usage:"to base url"`
28+
// 解析
29+
File []string `clop:"short;long;greedy" usage:"Parsing dst files" valid:"required"`
30+
// 生成目录
31+
Dir string `clop:"short;long" usage:"gen dir" default:"."`
32+
}
33+
34+
// 入口
35+
func (t *Transport) SubMain() {
36+
37+
for _, f := range t.File {
38+
39+
//var out bytes.Buffer
40+
c, err := parser.Parser(f)
41+
if err != nil {
42+
fmt.Printf("h2o.HTTP.parser %s\n", err)
43+
return
44+
}
45+
46+
for _, h := range c.Muilt {
47+
48+
h.ModifyHandler()
49+
50+
//protobuf.Marshal()
51+
h.Req.Name, h.Resp.Name = h.GetReqName(), h.GetRespName()
52+
53+
if h.Handler == "" {
54+
panic("h.Handler is empty")
55+
}
56+
57+
if t.FromType == goZero && t.ToType == httpClient {
58+
59+
tmpl := transportGoZeroHTTPClientTmpl{
60+
PackageName: c.Package,
61+
GoZeroBaseURL: t.FromBaseURL,
62+
HTTPClientBaseURL: t.ToBaseURL}
63+
64+
tmpl.Func = Func{
65+
RpcName: h.Handler,
66+
ReqName: h.Req.Name,
67+
RespName: h.Resp.Name}
68+
69+
save.TmplFile(getLogicName(t.Dir, c.Package, h.Handler), true, func() []byte {
70+
var typeBuf bytes.Buffer
71+
tmpl.Gen(&typeBuf)
72+
return typeBuf.Bytes()
73+
})
74+
}
75+
}
76+
77+
}
78+
}
79+
80+
func getLogicName(dir string, packageName string, handler string) string {
81+
prefix := fmt.Sprintf("%s/internal/logic/%s/%s", dir, packageName, handler)
82+
83+
os.MkdirAll(prefix, 0755)
84+
return fmt.Sprintf("%s/%s", prefix, handler)
85+
}

0 commit comments

Comments
 (0)