支持 stream 序列化 删除gateway的一些垃圾代码
This commit is contained in:
parent
a2873f273b
commit
2ed4499221
|
@ -329,11 +329,10 @@ func ExecCreateAutoLogic(workerSpaceDir string, ServiceName string, genDir, pack
|
|||
|
||||
methodMap := map[string]interface{}{
|
||||
"StructName": info.StructName,
|
||||
"MethodType": met.MethodType,
|
||||
"MethodName": met.MethodName,
|
||||
"ParamsName": paramsName,
|
||||
"Params": paramsAndType,
|
||||
"ParamCtx": met.Params[0],
|
||||
"ParamReq": met.Params[1],
|
||||
"MethodReturn": met.Returns[0],
|
||||
"MethodResponse": met.Returns[0][1:],
|
||||
}
|
||||
|
@ -374,9 +373,9 @@ func ExecCreateAutoLogic(workerSpaceDir string, ServiceName string, genDir, pack
|
|||
// log.Println(genTypesBuffer.String())
|
||||
formatted, err := format.Source(genTypesBuffer.Bytes())
|
||||
if err != nil {
|
||||
|
||||
panic(fmt.Sprintf("格式化代码失败:%v\n", err))
|
||||
// formatted = genTypesBuffer.Bytes()
|
||||
log.Println(genTypesBuffer.String())
|
||||
// panic(fmt.Sprintf("格式化代码失败:%v\n", err))
|
||||
formatted = genTypesBuffer.Bytes()
|
||||
}
|
||||
|
||||
_, err = f.Write(formatted)
|
||||
|
@ -763,7 +762,7 @@ func genGatewayTestFunction(grpcPath string) (createdCollection []*GrpcMethodTes
|
|||
if fdec, ok := decl.(*ast.GenDecl); ok && fdec.Tok == token.TYPE {
|
||||
// ast.Print(fset, fdec)
|
||||
for _, spec := range fdec.Specs {
|
||||
if typeSpec, ok := spec.(*ast.TypeSpec); ok && strings.HasSuffix(typeSpec.Name.Name, "Server") && !strings.HasPrefix(typeSpec.Name.Name, "Unsafe") {
|
||||
if typeSpec, ok := spec.(*ast.TypeSpec); ok && strings.HasSuffix(typeSpec.Name.Name, "Server") && !strings.HasPrefix(typeSpec.Name.Name, "Unsafe") && !strings.Contains(typeSpec.Name.Name, "_") {
|
||||
|
||||
serviceName := typeSpec.Name.Name
|
||||
serviceName = serviceName[:len(serviceName)-6]
|
||||
|
@ -773,8 +772,8 @@ func genGatewayTestFunction(grpcPath string) (createdCollection []*GrpcMethodTes
|
|||
// log.Println(ftype.)
|
||||
if methodDecl.Obj != nil {
|
||||
if methodDecl.Obj.Kind == ast.Fun {
|
||||
log.Println(typeSpec.Name.Name)
|
||||
log.Println(methodDecl.Name)
|
||||
// log.Println(typeSpec.Name.Name)
|
||||
// log.Println(methodDecl.Name)
|
||||
|
||||
created := GrpcMethodTest{}
|
||||
|
||||
|
@ -1080,9 +1079,25 @@ func parseGoFile(filePath string) (ClientParams []*ClientParam) {
|
|||
// fieldName := field.Names[0].Name
|
||||
// log.Println("Field:", fieldName)
|
||||
}
|
||||
} else if _, ok := typeSpec.Type.(*ast.InterfaceType); ok {
|
||||
} else if iface, ok := typeSpec.Type.(*ast.InterfaceType); ok {
|
||||
interfaceName := typeSpec.Name.Name
|
||||
|
||||
if len(iface.Methods.List) == 3 {
|
||||
if len(iface.Methods.List[0].Names) == 1 && len(iface.Methods.List[1].Names) == 1 {
|
||||
name0 := iface.Methods.List[0].Names[0].Name
|
||||
name1 := iface.Methods.List[1].Names[0].Name
|
||||
if name0 == "Send" && name1 == "CloseAndRecv" {
|
||||
// log.Println(name0, name1)
|
||||
if getTypeString(iface.Methods.List[2].Type) == "grpc.ClientStream" {
|
||||
// MethodType = "stream"
|
||||
// log.Println(interfaceName)
|
||||
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if strings.HasSuffix(interfaceName, "Client") {
|
||||
Param.ClientName = interfaceName[0 : len(interfaceName)-6]
|
||||
}
|
||||
|
@ -1109,6 +1124,7 @@ func parseGoFile(filePath string) (ClientParams []*ClientParam) {
|
|||
|
||||
type GrpcServerMethod struct {
|
||||
MethodName string
|
||||
MethodType string
|
||||
Params []string
|
||||
Returns []string
|
||||
}
|
||||
|
@ -1148,10 +1164,30 @@ func ParseGrpcServerInfo(grpcPath string) (infos []*GrpcServerInfo) {
|
|||
continue
|
||||
}
|
||||
|
||||
if strings.Contains(ifaceSpec.Name.Name, "_") {
|
||||
continue
|
||||
}
|
||||
|
||||
if strings.HasPrefix(ifaceSpec.Name.Name, "Unsafe") {
|
||||
continue
|
||||
}
|
||||
|
||||
if len(ifaceType.Methods.List) == 3 {
|
||||
if len(ifaceType.Methods.List[0].Names) == 1 && len(ifaceType.Methods.List[1].Names) == 1 {
|
||||
name0 := ifaceType.Methods.List[0].Names[0].Name
|
||||
name1 := ifaceType.Methods.List[1].Names[0].Name
|
||||
if name0 == "SendAndClose" && name1 == "Recv" {
|
||||
// log.Println(name0, name1)
|
||||
if getTypeString(ifaceType.Methods.List[2].Type) == "grpc.ServerStream" {
|
||||
// MethodType = "stream"
|
||||
continue
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
ServiceName := ifaceSpec.Name.Name[0 : len(ifaceSpec.Name.Name)-6]
|
||||
info := &GrpcServerInfo{
|
||||
ServiceName: ServiceName,
|
||||
|
@ -1172,25 +1208,32 @@ func ParseGrpcServerInfo(grpcPath string) (infos []*GrpcServerInfo) {
|
|||
continue
|
||||
}
|
||||
|
||||
m := &GrpcServerMethod{}
|
||||
m := &GrpcServerMethod{
|
||||
MethodType: "rpc",
|
||||
}
|
||||
info.Method = append(info.Method, m)
|
||||
// 方法名称
|
||||
// log.Println("方法名:", method.Names[0].Name)
|
||||
// MethodName := method.Names[0].Name
|
||||
m.MethodName = method.Names[0].Name
|
||||
// 方法参数
|
||||
if len(method.Type.(*ast.FuncType).Params.List) > 0 {
|
||||
// log.Println("参数:")
|
||||
// params := method.Type.(*ast.FuncType).Params
|
||||
// log.Println(params.NumFields(), params.List)
|
||||
// log.Println(string(src[method.Pos()-1 : method.End()-1]))
|
||||
|
||||
for _, field := range method.Type.(*ast.FuncType).Params.List {
|
||||
mparams := method.Type.(*ast.FuncType).Params.List
|
||||
switch len(mparams) {
|
||||
case 2:
|
||||
for _, field := range mparams {
|
||||
// log.Printf("%s %s\n", field.Names, getTypeString(field.Type, packageName, 0))
|
||||
m.Params = append(m.Params, getTypeString(field.Type, packageName))
|
||||
}
|
||||
} else {
|
||||
case 1:
|
||||
m.MethodType = "stream"
|
||||
for _, field := range mparams {
|
||||
// log.Printf("%s %s\n", field.Names, getTypeString(field.Type, packageName, 0))
|
||||
m.Params = append(m.Params, getTypeString(field.Type, packageName))
|
||||
}
|
||||
case 0:
|
||||
log.Println("无参数")
|
||||
default:
|
||||
panic("诡异的结构")
|
||||
}
|
||||
|
||||
// 方法返回值
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
|
||||
"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
|
||||
"google.golang.org/grpc"
|
||||
)
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
package logic
|
||||
|
||||
import (
|
||||
"context"
|
||||
"{{.ProjectName}}/gen/go/service"
|
||||
|
||||
"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
|
||||
"google.golang.org/grpc"
|
||||
)
|
||||
|
||||
func AutoRegisterHandler(ctx context.Context, mux *runtime.ServeMux, opts ...grpc.DialOption) error {
|
||||
var err error
|
||||
{{range .FuncNames}}
|
||||
err = service.{{.}}(ctx, mux, opts...)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
{{end}}
|
||||
return nil
|
||||
}
|
|
@ -1,10 +1,23 @@
|
|||
package {{.PackageName}}
|
||||
|
||||
import (
|
||||
{{if eq .MethodType "rpc"}}
|
||||
"context"
|
||||
{{end}}
|
||||
"{{.ProjectName}}/gen/go/service"
|
||||
)
|
||||
|
||||
{{if eq .MethodType "rpc"}}
|
||||
|
||||
func (l *{{.StructName}}) {{.MethodName}}Logic({{range $index, $param := .Params}}{{if $index}}, {{end}}{{$param}}{{end}}) (resp {{.MethodReturn}},err error) {
|
||||
return resp, err
|
||||
}
|
||||
}
|
||||
|
||||
{{else if eq .MethodType "stream"}}
|
||||
|
||||
func (l *{{.StructName}}) {{.MethodName}}Logic(stream {{range $index, $param := .Params}}{{if $index}}, {{end}}{{$param}}{{end}}) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
{{end}}
|
||||
|
||||
|
|
|
@ -45,9 +45,19 @@ type {{.MethodName}}Handler struct {
|
|||
|
||||
type {{.MethodName}}HandlerMust struct{}
|
||||
|
||||
{{if eq .MethodType "rpc"}}
|
||||
|
||||
func (lgrpc *{{.StructName}}Grpc) {{.MethodName}}({{range $index, $param := .Params}}{{if $index}}, {{end}}{{$param}}{{end}}) ({{.MethodReturn}}, error) {
|
||||
return New{{.StructName}}(ctx).{{.MethodName}}Logic({{range $index, $param := .ParamsName}}{{if $index}}, {{end}}{{$param}}{{end}})
|
||||
}
|
||||
|
||||
{{else if eq .MethodType "stream"}}
|
||||
|
||||
func (lgrpc *{{.StructName}}Grpc) {{.MethodName}}(stream {{range $index, $param := .Params}}{{if $index}}, {{end}}{{$param}}{{end}}) error {
|
||||
return New{{.StructName}}(stream.Context()).{{.MethodName}}Logic(stream)
|
||||
}
|
||||
|
||||
{{end}}
|
||||
|
||||
{{end}}
|
||||
|
|
@ -13,32 +13,24 @@ import "google/api/httpbody.proto";
|
|||
//定义服务
|
||||
service notify {
|
||||
// 邮件注册确认
|
||||
rpc EmailSend(basic.Request) returns (EmailSendRes) {
|
||||
option (google.api.http) = {
|
||||
post: "/api/notify/email/send"
|
||||
body: "*"
|
||||
};
|
||||
}
|
||||
rpc EmailSend(basic.Request) returns (EmailSendRes) {}
|
||||
|
||||
// 邮件注册确认
|
||||
rpc EmailRegisterConfirm(basic.Request) returns (basic.Response) {
|
||||
option (google.api.http) = {
|
||||
post: "/api/notify/email/register/confirm"
|
||||
body: "*"
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
||||
rpc EmailRegisterConfirm(stream EmailStreamReq) returns (stream EmailStreamResp) {}
|
||||
}
|
||||
|
||||
message EmailSendReq {
|
||||
|
||||
string name = 1;
|
||||
}
|
||||
|
||||
message EmailStreamReq {
|
||||
string file_name = 1;
|
||||
google.api.HttpBody file_content = 2;
|
||||
string file_content = 2;
|
||||
}
|
||||
|
||||
message EmailStreamResp {
|
||||
string code = 1;
|
||||
string ok = 2;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user