aboutsummaryrefslogtreecommitdiff
path: root/games/rstnode/rst-core/src/wire/env.rs
blob: fd5ed690453ee33b2d392e387a2e1d804570331d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
use serde::{de::DeserializeOwned, Deserialize, Serialize};

#[repr(C)]
#[derive(Serialize, Deserialize)]
pub struct Envelope {
    size: u64,
    data: Vec<u8>,
}

impl Envelope {
    pub fn pack<T: Serialize>(d: T) -> Self {
        let data = bincode::serialize(&d).unwrap();
        let size = data.len() as u64;
        Self { size, data }
    }

    pub fn unpack<T: DeserializeOwned>(self) -> T {
        bincode::deserialize(&self.data).unwrap()
    }
}