Files
wayvr/wayvr-ipc/src/ipc.rs
2025-12-23 02:50:03 +00:00

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)?)?)
}