添加了对 proto 的解析支持
This commit is contained in:
@@ -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)
|
||||
}
|
||||
Reference in New Issue
Block a user