forevervm_sdk/api/
protocol.rs

1//! Types for the WebSocket protocol.
2
3use super::{
4    api_types::{ApiExecResultResponse, Instruction},
5    id_types::{InstructionSeq, MachineName, MachineOutputSeq, RequestSeq},
6    ApiErrorResponse,
7};
8use serde::{Deserialize, Serialize};
9
10#[derive(Debug, Serialize, Deserialize)]
11#[serde(tag = "type", rename_all = "snake_case")]
12pub enum MessageToServer {
13    Exec {
14        instruction: Instruction,
15        request_id: RequestSeq,
16    },
17}
18
19#[derive(Debug, Serialize, Deserialize, Clone, Copy)]
20#[serde(rename_all = "snake_case")]
21pub enum MessageLevel {
22    Info,
23    Warn,
24    Error,
25}
26
27#[derive(Debug, Serialize, Deserialize)]
28#[serde(tag = "type", rename_all = "snake_case")]
29pub enum MessageFromServer {
30    Connected {
31        machine_name: MachineName,
32    },
33
34    ExecReceived {
35        seq: InstructionSeq,
36        request_id: RequestSeq,
37    },
38
39    Result(ApiExecResultResponse),
40
41    Output {
42        chunk: StandardOutput,
43        instruction_id: InstructionSeq,
44    },
45
46    Error(ApiErrorResponse),
47
48    /// Use to send log / diagnostic messages to the client.
49    Message {
50        message: String,
51        level: MessageLevel,
52    },
53}
54
55#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
56pub enum StandardOutputStream {
57    #[serde(rename = "stdout")]
58    Stdout,
59    #[serde(rename = "stderr")]
60    Stderr,
61}
62
63#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
64pub struct StandardOutput {
65    pub stream: StandardOutputStream,
66    pub data: String,
67    pub seq: MachineOutputSeq,
68}