use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TcpConnect {
pub host: String,
pub port: u16,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TcpConnected {}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TcpData {
#[serde(with = "serde_bytes")]
pub data: Vec<u8>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TcpEof {}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TcpClose {}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TcpClosed {}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TcpFailed {
pub error: String,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn tcp_payloads_roundtrip() {
let connect = TcpConnect {
host: "127.0.0.1".to_string(),
port: 8080,
};
let mut buf = Vec::new();
ciborium::into_writer(&connect, &mut buf).unwrap();
let decoded: TcpConnect = ciborium::from_reader(&buf[..]).unwrap();
assert_eq!(decoded.host, connect.host);
assert_eq!(decoded.port, connect.port);
let data = TcpData {
data: b"hello".to_vec(),
};
buf.clear();
ciborium::into_writer(&data, &mut buf).unwrap();
let decoded: TcpData = ciborium::from_reader(&buf[..]).unwrap();
assert_eq!(decoded.data, data.data);
let failed = TcpFailed {
error: "connection refused".to_string(),
};
buf.clear();
ciborium::into_writer(&failed, &mut buf).unwrap();
let decoded: TcpFailed = ciborium::from_reader(&buf[..]).unwrap();
assert_eq!(decoded.error, failed.error);
}
}