1use crate::*;
4
5pub(crate) mod proto {
6 include!("../proto/gen/kitsune2.wire.rs");
7}
8
9pub use proto::{k2_proto::K2WireType, K2Proto};
10
11impl K2Proto {
12 pub fn decode(bytes: &[u8]) -> K2Result<Self> {
14 prost::Message::decode(std::io::Cursor::new(bytes)).map_err(|err| {
15 K2Error::other_src("Failed to decode K2Proto Message", err)
16 })
17 }
18
19 pub fn encode(&self) -> K2Result<bytes::Bytes> {
21 let mut out = bytes::BytesMut::new();
22
23 prost::Message::encode(self, &mut out).map_err(|err| {
24 K2Error::other_src("Failed to encode K2Proto Message", err)
25 })?;
26
27 Ok(out.freeze())
28 }
29}
30
31#[cfg(test)]
32mod test {
33 use super::*;
34
35 #[test]
36 fn happy_encode_decode() {
37 use prost::Message;
38
39 let m = K2Proto {
40 ty: K2WireType::Module as i32,
41 data: bytes::Bytes::from_static(b"a"),
42 space: Some(bytes::Bytes::from_static(b"b")),
43 module: Some("c".into()),
44 };
45
46 let m_enc = m.encode_to_vec();
47
48 let d = K2Proto {
49 ty: K2WireType::Disconnect as i32,
50 data: bytes::Bytes::from_static(b"d"),
51 space: None,
52 module: None,
53 };
54
55 let d_enc = d.encode_to_vec();
56
57 assert!(d_enc.len() < m_enc.len());
60
61 let m_dec = K2Proto::decode(&m_enc).unwrap();
62
63 assert_eq!(m, m_dec);
64
65 let d_dec = K2Proto::decode(&d_enc).unwrap();
66
67 assert_eq!(d, d_dec);
68 }
69}