43 lines
842 B
Rust
43 lines
842 B
Rust
use std::sync::{Arc, Mutex as SyncMutex};
|
|
|
|
pub type Serial = u64;
|
|
|
|
#[derive(Clone, Default)]
|
|
pub struct SerialGenerator {
|
|
serial: Arc<SyncMutex<u64>>,
|
|
}
|
|
|
|
impl SerialGenerator {
|
|
pub fn new() -> SerialGenerator {
|
|
Self {
|
|
serial: Arc::new(SyncMutex::new(0)),
|
|
}
|
|
}
|
|
|
|
pub fn increment_get(&self) -> Serial {
|
|
let mut serial = self.serial.lock().unwrap();
|
|
let cur = *serial;
|
|
*serial += 1;
|
|
cur
|
|
}
|
|
}
|
|
|
|
pub const PROTOCOL_VERSION: u32 = 3;
|
|
pub const CONNECTION_MAGIC: &str = "wayvr_ipc";
|
|
|
|
pub fn data_encode<T>(data: &T) -> Vec<u8>
|
|
where
|
|
T: serde::Serialize,
|
|
{
|
|
let str = serde_json::to_string(&data).unwrap();
|
|
log::debug!("serialized data: {}", str);
|
|
str.into_bytes()
|
|
}
|
|
|
|
pub fn data_decode<T>(data: &[u8]) -> anyhow::Result<T>
|
|
where
|
|
T: for<'a> serde::Deserialize<'a>,
|
|
{
|
|
Ok(serde_json::from_str::<T>(std::str::from_utf8(data)?)?)
|
|
}
|