synapse_pingora/tunnel/
types.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
7#[serde(rename_all = "lowercase")]
8pub enum ConnectionState {
9 Disconnected,
10 Connecting,
11 Authenticating,
12 Connected,
13 Reconnecting,
14 Error,
15}
16
17#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
19#[serde(rename_all = "lowercase")]
20pub enum TunnelChannel {
21 Shell,
22 Logs,
23 Diag,
24 Control,
25 Files,
26 Update,
27}
28
29impl TunnelChannel {
30 pub const ALL: [TunnelChannel; 6] = [
31 TunnelChannel::Shell,
32 TunnelChannel::Logs,
33 TunnelChannel::Diag,
34 TunnelChannel::Control,
35 TunnelChannel::Files,
36 TunnelChannel::Update,
37 ];
38
39 pub const fn as_str(self) -> &'static str {
40 match self {
41 TunnelChannel::Shell => "shell",
42 TunnelChannel::Logs => "logs",
43 TunnelChannel::Diag => "diag",
44 TunnelChannel::Control => "control",
45 TunnelChannel::Files => "files",
46 TunnelChannel::Update => "update",
47 }
48 }
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize, Default)]
53pub struct TunnelAuthMetadata {
54 pub hostname: Option<String>,
55 pub version: Option<String>,
56 pub platform: Option<String>,
57}
58
59#[derive(Debug, Clone, Serialize, Deserialize)]
61pub struct TunnelAuthPayload {
62 #[serde(rename = "sensorId")]
63 pub sensor_id: String,
64 #[serde(rename = "apiKey")]
65 pub api_key: String,
66 #[serde(skip_serializing_if = "Option::is_none")]
67 pub capabilities: Option<Vec<String>>,
68 #[serde(skip_serializing_if = "Option::is_none")]
69 pub metadata: Option<TunnelAuthMetadata>,
70}
71
72#[derive(Debug, Clone, Serialize, Deserialize)]
74pub struct TunnelAuthMessage {
75 #[serde(rename = "type")]
76 pub message_type: String,
77 pub payload: TunnelAuthPayload,
78 #[serde(skip_serializing_if = "Option::is_none")]
79 pub timestamp: Option<String>,
80}
81
82#[derive(Debug, Clone)]
84pub struct TunnelEnvelope {
85 pub channel: TunnelChannel,
86 pub session_id: Option<String>,
87 pub sequence_id: Option<u64>,
88 pub timestamp: Option<i64>,
89 pub raw: serde_json::Value,
90}
91
92#[derive(Debug, Clone, Serialize, Deserialize)]
94pub struct LegacyTunnelMessage {
95 #[serde(rename = "type")]
96 pub message_type: String,
97 #[serde(default, rename = "sessionId")]
98 pub session_id: Option<String>,
99 #[serde(default, rename = "requestId")]
100 pub request_id: Option<String>,
101 #[serde(default)]
102 pub payload: serde_json::Value,
103 #[serde(default)]
104 pub timestamp: Option<String>,
105}