diff options
Diffstat (limited to 'lib/xaapiv1')
-rw-r--r-- | lib/xaapiv1/config.go | 22 | ||||
-rw-r--r-- | lib/xaapiv1/events.go | 77 | ||||
-rw-r--r-- | lib/xaapiv1/exec.go | 64 | ||||
-rw-r--r-- | lib/xaapiv1/projects.go | 38 | ||||
-rw-r--r-- | lib/xaapiv1/sdks.go | 11 | ||||
-rw-r--r-- | lib/xaapiv1/version.go | 15 |
6 files changed, 227 insertions, 0 deletions
diff --git a/lib/xaapiv1/config.go b/lib/xaapiv1/config.go new file mode 100644 index 0000000..ae853dd --- /dev/null +++ b/lib/xaapiv1/config.go @@ -0,0 +1,22 @@ +package xaapiv1 + +// APIConfig parameters (json format) of /config command +type APIConfig struct { + Servers []ServerCfg `json:"servers"` + + // Not exposed outside in JSON + Version string `json:"-"` + APIVersion string `json:"-"` + VersionGitTag string `json:"-"` +} + +// ServerCfg . +type ServerCfg struct { + ID string `json:"id"` + URL string `json:"url"` + APIURL string `json:"apiUrl"` + PartialURL string `json:"partialUrl"` + ConnRetry int `json:"connRetry"` + Connected bool `json:"connected"` + Disabled bool `json:"disabled"` +} diff --git a/lib/xaapiv1/events.go b/lib/xaapiv1/events.go new file mode 100644 index 0000000..12c8cb2 --- /dev/null +++ b/lib/xaapiv1/events.go @@ -0,0 +1,77 @@ +package xaapiv1 + +import ( + "encoding/json" + "fmt" +) + +// EventRegisterArgs is the parameters (json format) of /events/register command +type EventRegisterArgs struct { + Name string `json:"name"` + ProjectID string `json:"filterProjectID"` +} + +// EventUnRegisterArgs is the parameters (json format) of /events/unregister command +type EventUnRegisterArgs struct { + Name string `json:"name"` + ID int `json:"id"` +} + +// Events Type definitions +const ( + // EventTypePrefix Used as event prefix + EventTypePrefix = "event:" // following by event type + + // Supported Events type + EVTAll = EventTypePrefix + "all" + EVTServerConfig = EventTypePrefix + "server-config" // type EventMsg with Data type xaapiv1.ServerCfg + EVTProjectAdd = EventTypePrefix + "project-add" // type EventMsg with Data type xaapiv1.ProjectConfig + EVTProjectDelete = EventTypePrefix + "project-delete" // type EventMsg with Data type xaapiv1.ProjectConfig + EVTProjectChange = EventTypePrefix + "project-state-change" // type EventMsg with Data type xaapiv1.ProjectConfig +) + +// EVTAllList List of all supported events +var EVTAllList = []string{ + EVTServerConfig, + EVTProjectAdd, + EVTProjectDelete, + EVTProjectChange, +} + +// EventMsg Event message send over Websocket, data format depend to Type (see DecodeXXX function) +type EventMsg struct { + Time string `json:"time"` // Timestamp + FromSessionID string `json:"sessionID"` // Session ID of client that emits this event + Type string `json:"type"` // Data type + Data interface{} `json:"data"` // Data +} + +// DecodeServerCfg Helper to decode Data field type ServerCfg +func (e *EventMsg) DecodeServerCfg() (ServerCfg, error) { + p := ServerCfg{} + if e.Type != EVTServerConfig { + return p, fmt.Errorf("Invalid type") + } + d, err := json.Marshal(e.Data) + if err == nil { + err = json.Unmarshal(d, &p) + } + return p, err +} + +// DecodeProjectConfig Helper to decode Data field type ProjectConfig +func (e *EventMsg) DecodeProjectConfig() (ProjectConfig, error) { + var err error + p := ProjectConfig{} + switch e.Type { + case EVTProjectAdd, EVTProjectChange, EVTProjectDelete: + d := []byte{} + d, err = json.Marshal(e.Data) + if err == nil { + err = json.Unmarshal(d, &p) + } + default: + err = fmt.Errorf("Invalid type") + } + return p, err +} diff --git a/lib/xaapiv1/exec.go b/lib/xaapiv1/exec.go new file mode 100644 index 0000000..b96be79 --- /dev/null +++ b/lib/xaapiv1/exec.go @@ -0,0 +1,64 @@ +package xaapiv1 + +type ( + // ExecArgs JSON parameters of /exec command + ExecArgs struct { + ID string `json:"id" binding:"required"` + SdkID string `json:"sdkID"` // sdk ID to use for setting env + CmdID string `json:"cmdID"` // command unique ID + Cmd string `json:"cmd" binding:"required"` + Args []string `json:"args"` + Env []string `json:"env"` + RPath string `json:"rpath"` // relative path into project + TTY bool `json:"tty"` // Use a tty, specific to gdb --tty option + TTYGdbserverFix bool `json:"ttyGdbserverFix"` // Set to true to activate gdbserver workaround about inferior output + ExitImmediate bool `json:"exitImmediate"` // when true, exit event sent immediately when command exited (IOW, don't wait file synchronization) + CmdTimeout int `json:"timeout"` // command completion timeout in Second + } + + // ExecInMsg Message used to received input characters (stdin) + ExecInMsg struct { + CmdID string `json:"cmdID"` + Timestamp string `json:"timestamp"` + Stdin string `json:"stdin"` + } + + // ExecOutMsg Message used to send output characters (stdout+stderr) + ExecOutMsg struct { + CmdID string `json:"cmdID"` + Timestamp string `json:"timestamp"` + Stdout string `json:"stdout"` + Stderr string `json:"stderr"` + } + + // ExecExitMsg Message sent when executed command exited + ExecExitMsg struct { + CmdID string `json:"cmdID"` + Timestamp string `json:"timestamp"` + Code int `json:"code"` + Error error `json:"error"` + } + + // ExecSignalArgs JSON parameters of /exec/signal command + ExecSignalArgs struct { + CmdID string `json:"cmdID" binding:"required"` // command id + Signal string `json:"signal" binding:"required"` // signal number + } +) + +const ( + // ExecInEvent Event send in WS when characters are sent (stdin) + ExecInEvent = "exec:input" + + // ExecOutEvent Event send in WS when characters are received (stdout or stderr) + ExecOutEvent = "exec:output" + + // ExecExitEvent Event send in WS when program exited + ExecExitEvent = "exec:exit" + + // ExecInferiorInEvent Event send in WS when characters are sent to an inferior (used by gdb inferior/tty) + ExecInferiorInEvent = "exec:inferior-input" + + // ExecInferiorOutEvent Event send in WS when characters are received by an inferior + ExecInferiorOutEvent = "exec:inferior-output" +) diff --git a/lib/xaapiv1/projects.go b/lib/xaapiv1/projects.go new file mode 100644 index 0000000..51c5837 --- /dev/null +++ b/lib/xaapiv1/projects.go @@ -0,0 +1,38 @@ +package xaapiv1 + +// ProjectType definition +type ProjectType string + +const ( + TypePathMap = "PathMap" + TypeCloudSync = "CloudSync" + TypeCifsSmb = "CIFS" +) + +// Project Status definition +const ( + StatusErrorConfig = "ErrorConfig" + StatusDisable = "Disable" + StatusEnable = "Enable" + StatusPause = "Pause" + StatusSyncing = "Syncing" +) + +// ProjectConfig is the config for one project +type ProjectConfig struct { + ID string `json:"id"` + ServerID string `json:"serverId"` + Label string `json:"label"` + ClientPath string `json:"clientPath"` + ServerPath string `json:"serverPath"` + Type ProjectType `json:"type"` + Status string `json:"status"` + IsInSync bool `json:"isInSync"` + DefaultSdk string `json:"defaultSdk"` + ClientData string `json:"clientData"` // free form field that can used by client +} + +// ProjectConfigUpdatableFields List fields that can be updated using Update function +var ProjectConfigUpdatableFields = []string{ + "Label", "DefaultSdk", "ClientData", +} diff --git a/lib/xaapiv1/sdks.go b/lib/xaapiv1/sdks.go new file mode 100644 index 0000000..63ef357 --- /dev/null +++ b/lib/xaapiv1/sdks.go @@ -0,0 +1,11 @@ +package xaapiv1 + +// SDK Define a cross tool chain used to build application +type SDK struct { + ID string `json:"id" binding:"required"` + Name string `json:"name"` + Profile string `json:"profile"` + Version string `json:"version"` + Arch string `json:"arch"` + Path string `json:"path"` +} diff --git a/lib/xaapiv1/version.go b/lib/xaapiv1/version.go new file mode 100644 index 0000000..5fed4e2 --- /dev/null +++ b/lib/xaapiv1/version.go @@ -0,0 +1,15 @@ +package xaapiv1 + +// VersionData +type VersionData struct { + ID string `json:"id"` + Version string `json:"version"` + APIVersion string `json:"apiVersion"` + VersionGitTag string `json:"gitTag"` +} + +// XDSVersion +type XDSVersion struct { + Client VersionData `json:"client"` + Server []VersionData `json:"servers"` +} |