mirror of
https://github.com/wavetermdev/waveterm.git
synced 2025-01-17 20:51:55 +01:00
01b5d71709
lots of changes. new wshrpc implementation. unify websocket, web, blockcontroller, domain sockets, and terminal inputs to all use the new rpc system. lots of moving files around to deal with circular dependencies use new wshrpc as a client in wsh cmd
68 lines
2.3 KiB
Go
68 lines
2.3 KiB
Go
// Copyright 2024, Command Line Inc.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/wavetermdev/thenextwave/pkg/util/utilfn"
|
|
"github.com/wavetermdev/thenextwave/pkg/wshrpc/wshserver"
|
|
"github.com/wavetermdev/thenextwave/pkg/wshutil"
|
|
)
|
|
|
|
func genMethod(fd *os.File, methodDecl *wshserver.WshServerMethodDecl) {
|
|
fmt.Fprintf(fd, "// command %q, wshserver.%s\n", methodDecl.Command, methodDecl.MethodName)
|
|
var dataType string
|
|
dataVarName := "nil"
|
|
if methodDecl.CommandDataType != nil {
|
|
dataType = ", data " + methodDecl.CommandDataType.String()
|
|
dataVarName = "data"
|
|
}
|
|
returnType := "error"
|
|
respName := "_"
|
|
tParamVal := "any"
|
|
if methodDecl.DefaultResponseDataType != nil {
|
|
returnType = "(" + methodDecl.DefaultResponseDataType.String() + ", error)"
|
|
respName = "resp"
|
|
tParamVal = methodDecl.DefaultResponseDataType.String()
|
|
}
|
|
fmt.Fprintf(fd, "func %s(w *wshutil.WshRpc%s, opts *wshrpc.WshRpcCommandOpts) %s {\n", methodDecl.MethodName, dataType, returnType)
|
|
if methodDecl.CommandType == wshutil.RpcType_Call {
|
|
fmt.Fprintf(fd, " %s, err := sendRpcRequestHelper[%s](w, %q, %s, opts)\n", respName, tParamVal, methodDecl.Command, dataVarName)
|
|
if methodDecl.DefaultResponseDataType != nil {
|
|
fmt.Fprintf(fd, " return resp, err\n")
|
|
} else {
|
|
fmt.Fprintf(fd, " return err\n")
|
|
}
|
|
} else {
|
|
panic("unsupported command type " + methodDecl.CommandType)
|
|
}
|
|
fmt.Fprintf(fd, "}\n\n")
|
|
}
|
|
|
|
func main() {
|
|
fd, err := os.Create("pkg/wshrpc/wshclient/wshclient.go")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer fd.Close()
|
|
fmt.Fprintf(os.Stderr, "generating wshclient file to %s\n", fd.Name())
|
|
fmt.Fprintf(fd, "// Copyright 2024, Command Line Inc.\n")
|
|
fmt.Fprintf(fd, "// SPDX-License-Identifier: Apache-2.0\n\n")
|
|
fmt.Fprintf(fd, "// generated by cmd/generatewshclient/main-generatewshclient.go\n\n")
|
|
fmt.Fprintf(fd, "package wshclient\n\n")
|
|
fmt.Fprintf(fd, "import (\n")
|
|
fmt.Fprintf(fd, " \"github.com/wavetermdev/thenextwave/pkg/wshutil\"\n")
|
|
fmt.Fprintf(fd, " \"github.com/wavetermdev/thenextwave/pkg/wshrpc\"\n")
|
|
fmt.Fprintf(fd, " \"github.com/wavetermdev/thenextwave/pkg/waveobj\"\n")
|
|
fmt.Fprintf(fd, ")\n\n")
|
|
|
|
for _, key := range utilfn.GetOrderedMapKeys(wshserver.WshServerCommandToDeclMap) {
|
|
methodDecl := wshserver.WshServerCommandToDeclMap[key]
|
|
genMethod(fd, methodDecl)
|
|
}
|
|
fmt.Fprintf(fd, "\n")
|
|
}
|