75 lines
1.8 KiB
Go
75 lines
1.8 KiB
Go
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)
|
|
}
|