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) }