添加了对 proto 的解析支持

This commit is contained in:
2025-09-26 16:16:05 +08:00
parent 1cec74cec7
commit 84149a54de
10 changed files with 528 additions and 4 deletions
+74
View File
@@ -0,0 +1,74 @@
package worker
import (
"complie-erlang/config"
"complie-erlang/parser/zm_proto"
"complie-erlang/template"
"path/filepath"
"time"
)
type Proto2ErlangWorker struct {
*zm_proto.Proto
Template *template.Template
}
func NewProto2ErlangWorker() *Proto2ErlangWorker {
return &Proto2ErlangWorker{
zm_proto.NewProto(),
template.NewTemplate(),
}
}
// LoadTemplates 加载模版
func (p *Proto2ErlangWorker) LoadTemplates(templatePath string) error {
return p.Template.ParseGlob(templatePath)
}
// LoadTemplatesArgs 解析模版数据
func (p *Proto2ErlangWorker) LoadTemplatesArgs(protoPath string, DefaultArgs []config.DefaultArg) (map[string]any, error) {
p.Include(filepath.Dir(protoPath))
if err := p.ParseImport(filepath.Base(protoPath)); err != nil {
return nil, err
}
parsePort, err := zm_proto.ParsePort(p.Proto, protoPath)
if err != nil {
return nil, err
}
var templatArgs = make(map[string]any)
var defaultArgs = make(map[string]any)
for _, defaultArg := range DefaultArgs {
defaultArgs[defaultArg.Key] = defaultArg.Value
}
templatArgs["default"] = defaultArgs
var ports []any
for _, port := range parsePort {
if port.IsPush {
continue
}
var portMap = map[string]any{
"Cmd": port.Cmd,
"PortDesc": port.PortDesc,
"ClientPB": port.ClientPB,
"ServerPB": port.ServerPB,
"ClientProto": p.Proto.MessageToErlMod(port.ClientPB),
"ServerProto": p.Proto.MessageToErlMod(port.ServerPB),
}
ports = append(ports, portMap)
}
templatArgs["ports"] = ports
// 其他默认值
templatArgs["CreateAt"] = time.Now().Format(time.DateTime)
return templatArgs, nil
}
// ExecuteTemplate 组装模版
func (p *Proto2ErlangWorker) ExecuteTemplate(template string, templatArgs map[string]any) (string, error) {
return p.Template.ExecuteTemplate(template, templatArgs)
}