microsandbox_protocol/
tcp.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
11pub struct TcpConnect {
12 pub host: String,
14
15 pub port: u16,
17}
18
19#[derive(Debug, Clone, Serialize, Deserialize)]
21pub struct TcpConnected {}
22
23#[derive(Debug, Clone, Serialize, Deserialize)]
25pub struct TcpData {
26 #[serde(with = "serde_bytes")]
28 pub data: Vec<u8>,
29}
30
31#[derive(Debug, Clone, Serialize, Deserialize)]
33pub struct TcpEof {}
34
35#[derive(Debug, Clone, Serialize, Deserialize)]
37pub struct TcpClose {}
38
39#[derive(Debug, Clone, Serialize, Deserialize)]
41pub struct TcpClosed {}
42
43#[derive(Debug, Clone, Serialize, Deserialize)]
45pub struct TcpFailed {
46 pub error: String,
48}
49
50#[cfg(test)]
55mod tests {
56 use super::*;
57
58 #[test]
59 fn tcp_payloads_roundtrip() {
60 let connect = TcpConnect {
61 host: "127.0.0.1".to_string(),
62 port: 8080,
63 };
64 let mut buf = Vec::new();
65 ciborium::into_writer(&connect, &mut buf).unwrap();
66 let decoded: TcpConnect = ciborium::from_reader(&buf[..]).unwrap();
67 assert_eq!(decoded.host, connect.host);
68 assert_eq!(decoded.port, connect.port);
69
70 let data = TcpData {
71 data: b"hello".to_vec(),
72 };
73 buf.clear();
74 ciborium::into_writer(&data, &mut buf).unwrap();
75 let decoded: TcpData = ciborium::from_reader(&buf[..]).unwrap();
76 assert_eq!(decoded.data, data.data);
77
78 let failed = TcpFailed {
79 error: "connection refused".to_string(),
80 };
81 buf.clear();
82 ciborium::into_writer(&failed, &mut buf).unwrap();
83 let decoded: TcpFailed = ciborium::from_reader(&buf[..]).unwrap();
84 assert_eq!(decoded.error, failed.error);
85 }
86}