use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize)] pub struct Message { pub init: Option, pub segment: Option, } #[derive(Serialize, Deserialize)] pub struct Init {} #[derive(Serialize, Deserialize)] pub struct Segment { pub track_id: u32, } impl Message { pub fn new() -> Self { Message { init: None, segment: None, } } pub fn serialize(&self) -> anyhow::Result> { let str = serde_json::to_string(self)?; let bytes = str.as_bytes(); let size = bytes.len() + 8; let mut out = Vec::with_capacity(size); out.extend_from_slice(&(size as u32).to_be_bytes()); out.extend_from_slice(b"warp"); out.extend_from_slice(bytes); Ok(out) } }