// Copyright 2024, Command Line Inc. // SPDX-License-Identifier: Apache-2.0 package main import ( "fmt" "os" "reflect" "strings" "github.com/wavetermdev/waveterm/pkg/gogen" "github.com/wavetermdev/waveterm/pkg/util/utilfn" "github.com/wavetermdev/waveterm/pkg/waveobj" "github.com/wavetermdev/waveterm/pkg/wconfig" "github.com/wavetermdev/waveterm/pkg/wshrpc" ) const WshClientFileName = "pkg/wshrpc/wshclient/wshclient.go" const WaveObjMetaConstsFileName = "pkg/waveobj/metaconsts.go" const SettingsMetaConstsFileName = "pkg/wconfig/metaconsts.go" func GenerateWshClient() error { fmt.Fprintf(os.Stderr, "generating wshclient file to %s\n", WshClientFileName) var buf strings.Builder gogen.GenerateBoilerplate(&buf, "wshclient", []string{ "github.com/wavetermdev/waveterm/pkg/wshutil", "github.com/wavetermdev/waveterm/pkg/wshrpc", "github.com/wavetermdev/waveterm/pkg/waveobj", "github.com/wavetermdev/waveterm/pkg/wconfig", "github.com/wavetermdev/waveterm/pkg/wps", "github.com/wavetermdev/waveterm/pkg/vdom", "github.com/wavetermdev/waveterm/pkg/telemetry", }) wshDeclMap := wshrpc.GenerateWshCommandDeclMap() for _, key := range utilfn.GetOrderedMapKeys(wshDeclMap) { methodDecl := wshDeclMap[key] if methodDecl.CommandType == wshrpc.RpcType_ResponseStream { gogen.GenMethod_ResponseStream(&buf, methodDecl) } else if methodDecl.CommandType == wshrpc.RpcType_Call { gogen.GenMethod_Call(&buf, methodDecl) } else { panic("unsupported command type " + methodDecl.CommandType) } } buf.WriteString("\n") written, err := utilfn.WriteFileIfDifferent(WshClientFileName, []byte(buf.String())) if !written { fmt.Fprintf(os.Stderr, "no changes to %s\n", WshClientFileName) } return err } func GenerateWaveObjMetaConsts() error { fmt.Fprintf(os.Stderr, "generating waveobj meta consts file to %s\n", WaveObjMetaConstsFileName) var buf strings.Builder gogen.GenerateBoilerplate(&buf, "waveobj", []string{}) gogen.GenerateMetaMapConsts(&buf, "MetaKey_", reflect.TypeOf(waveobj.MetaTSType{})) buf.WriteString("\n") written, err := utilfn.WriteFileIfDifferent(WaveObjMetaConstsFileName, []byte(buf.String())) if !written { fmt.Fprintf(os.Stderr, "no changes to %s\n", WaveObjMetaConstsFileName) } return err } func GenerateSettingsMetaConsts() error { fmt.Fprintf(os.Stderr, "generating settings meta consts file to %s\n", SettingsMetaConstsFileName) var buf strings.Builder gogen.GenerateBoilerplate(&buf, "wconfig", []string{}) gogen.GenerateMetaMapConsts(&buf, "ConfigKey_", reflect.TypeOf(wconfig.SettingsType{})) buf.WriteString("\n") written, err := utilfn.WriteFileIfDifferent(SettingsMetaConstsFileName, []byte(buf.String())) if !written { fmt.Fprintf(os.Stderr, "no changes to %s\n", SettingsMetaConstsFileName) } return err } func main() { err := GenerateWshClient() if err != nil { fmt.Fprintf(os.Stderr, "error generating wshclient: %v\n", err) return } err = GenerateWaveObjMetaConsts() if err != nil { fmt.Fprintf(os.Stderr, "error generating waveobj meta consts: %v\n", err) return } err = GenerateSettingsMetaConsts() if err != nil { fmt.Fprintf(os.Stderr, "error generating settings meta consts: %v\n", err) return } }