mirror of
https://github.com/Astatin3/unshell-nodes-rs.git
synced 2026-06-09 00:28:00 -06:00
52 lines
1.0 KiB
Rust
52 lines
1.0 KiB
Rust
|
|
use std::fmt::Debug;
|
||
|
|
|
||
|
|
use bincode::{Decode, Encode, config::Configuration};
|
||
|
|
|
||
|
|
use crate::Error;
|
||
|
|
|
||
|
|
#[derive(Debug, Encode, Decode, Clone)]
|
||
|
|
pub enum Packets {
|
||
|
|
SyncUUID(String),
|
||
|
|
Update {
|
||
|
|
routes: Vec<String>,
|
||
|
|
},
|
||
|
|
Disconnect {
|
||
|
|
routes: Vec<String>,
|
||
|
|
},
|
||
|
|
DataUnrouted {
|
||
|
|
src: String,
|
||
|
|
dest: String,
|
||
|
|
data: Vec<u8>,
|
||
|
|
},
|
||
|
|
DataRouted {
|
||
|
|
path: Vec<String>,
|
||
|
|
data: Vec<u8>,
|
||
|
|
},
|
||
|
|
}
|
||
|
|
|
||
|
|
impl Packets {
|
||
|
|
pub fn encode(&self) -> Result<Vec<u8>, Error> {
|
||
|
|
encode_vec(self)
|
||
|
|
}
|
||
|
|
pub fn decode(data: &[u8]) -> Result<Self, Error> {
|
||
|
|
decode_vec(data)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
pub fn encode_vec<P>(object: &P) -> Result<Vec<u8>, Error>
|
||
|
|
where
|
||
|
|
P: Encode + Decode<()> + Debug + Clone + 'static,
|
||
|
|
{
|
||
|
|
Ok(bincode::encode_to_vec(object, crate::BINCODE_CONFIG)?)
|
||
|
|
}
|
||
|
|
|
||
|
|
pub fn decode_vec<P>(data: &[u8]) -> Result<P, Error>
|
||
|
|
where
|
||
|
|
P: Encode + Decode<()> + Debug + Clone + 'static,
|
||
|
|
{
|
||
|
|
let (decoded, _) =
|
||
|
|
bincode::decode_from_slice::<P, Configuration>(&data[..], crate::BINCODE_CONFIG)?;
|
||
|
|
|
||
|
|
Ok(decoded)
|
||
|
|
}
|