use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum ConnectionState {
Disconnected,
Connecting,
Authenticating,
Connected,
Reconnecting,
Error,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum TunnelChannel {
Shell,
Logs,
Diag,
Control,
Files,
Update,
}
impl TunnelChannel {
pub const ALL: [TunnelChannel; 6] = [
TunnelChannel::Shell,
TunnelChannel::Logs,
TunnelChannel::Diag,
TunnelChannel::Control,
TunnelChannel::Files,
TunnelChannel::Update,
];
pub const fn as_str(self) -> &'static str {
match self {
TunnelChannel::Shell => "shell",
TunnelChannel::Logs => "logs",
TunnelChannel::Diag => "diag",
TunnelChannel::Control => "control",
TunnelChannel::Files => "files",
TunnelChannel::Update => "update",
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct TunnelAuthMetadata {
pub hostname: Option<String>,
pub version: Option<String>,
pub platform: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TunnelAuthPayload {
#[serde(rename = "sensorId")]
pub sensor_id: String,
#[serde(rename = "apiKey")]
pub api_key: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub capabilities: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<TunnelAuthMetadata>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TunnelAuthMessage {
#[serde(rename = "type")]
pub message_type: String,
pub payload: TunnelAuthPayload,
#[serde(skip_serializing_if = "Option::is_none")]
pub timestamp: Option<String>,
}
#[derive(Debug, Clone)]
pub struct TunnelEnvelope {
pub channel: TunnelChannel,
pub session_id: Option<String>,
pub sequence_id: Option<u64>,
pub timestamp: Option<i64>,
pub raw: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LegacyTunnelMessage {
#[serde(rename = "type")]
pub message_type: String,
#[serde(default, rename = "sessionId")]
pub session_id: Option<String>,
#[serde(default, rename = "requestId")]
pub request_id: Option<String>,
#[serde(default)]
pub payload: serde_json::Value,
#[serde(default)]
pub timestamp: Option<String>,
}