2025-01-05 04:56:57 +00:00
|
|
|
// Copyright 2025, Command Line Inc.
|
2024-06-12 21:18:03 +00:00
|
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
|
|
|
|
|
|
package webcmd
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
|
|
|
|
"reflect"
|
|
|
|
|
|
2024-09-05 21:25:45 +00:00
|
|
|
"github.com/wavetermdev/waveterm/pkg/tsgen/tsgenmeta"
|
|
|
|
|
"github.com/wavetermdev/waveterm/pkg/util/utilfn"
|
|
|
|
|
"github.com/wavetermdev/waveterm/pkg/wshutil"
|
2024-06-12 21:18:03 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
const (
|
2026-01-22 00:54:18 +00:00
|
|
|
WSCommand_Rpc = "rpc"
|
2024-06-12 21:18:03 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type WSCommandType interface {
|
|
|
|
|
GetWSCommand() string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func WSCommandTypeUnionMeta() tsgenmeta.TypeUnionMeta {
|
|
|
|
|
return tsgenmeta.TypeUnionMeta{
|
|
|
|
|
BaseType: reflect.TypeOf((*WSCommandType)(nil)).Elem(),
|
|
|
|
|
TypeFieldName: "wscommand",
|
|
|
|
|
Types: []reflect.Type{
|
2024-07-17 22:24:43 +00:00
|
|
|
reflect.TypeOf(WSRpcCommand{}),
|
2024-06-12 21:18:03 +00:00
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-07-17 22:24:43 +00:00
|
|
|
type WSRpcCommand struct {
|
|
|
|
|
WSCommand string `json:"wscommand" tstype:"\"rpc\""`
|
|
|
|
|
Message *wshutil.RpcMessage `json:"message"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (cmd *WSRpcCommand) GetWSCommand() string {
|
|
|
|
|
return cmd.WSCommand
|
|
|
|
|
}
|
|
|
|
|
|
2024-06-12 21:18:03 +00:00
|
|
|
func ParseWSCommandMap(cmdMap map[string]any) (WSCommandType, error) {
|
|
|
|
|
cmdType, ok := cmdMap["wscommand"].(string)
|
|
|
|
|
if !ok {
|
|
|
|
|
return nil, fmt.Errorf("no wscommand field in command map")
|
|
|
|
|
}
|
|
|
|
|
switch cmdType {
|
2024-07-17 22:24:43 +00:00
|
|
|
case WSCommand_Rpc:
|
|
|
|
|
var cmd WSRpcCommand
|
2024-07-30 19:33:28 +00:00
|
|
|
err := utilfn.DoMapStructure(&cmd, cmdMap)
|
2024-07-17 22:24:43 +00:00
|
|
|
if err != nil {
|
|
|
|
|
return nil, fmt.Errorf("error decoding WSRpcCommand: %w", err)
|
|
|
|
|
}
|
|
|
|
|
return &cmd, nil
|
2024-06-12 21:18:03 +00:00
|
|
|
default:
|
|
|
|
|
return nil, fmt.Errorf("unknown wscommand type %q", cmdType)
|
|
|
|
|
}
|
|
|
|
|
}
|