Skip to main content

playit_agent_proto/
rpc.rs

1use std::io::{Read, Write};
2use byteorder::{BigEndian, ReadBytesExt};
3use crate::MessageEncoding;
4
5#[derive(Debug, Eq, PartialEq, Clone)]
6pub struct ControlRpcMessage<T: MessageEncoding> {
7    pub request_id: u64,
8    pub content: T,
9}
10
11impl<T: MessageEncoding> MessageEncoding for ControlRpcMessage<T> {
12    const STATIC_SIZE: Option<usize> = match T::STATIC_SIZE {
13        Some(v) => Some(8 + v),
14        None => None,
15    };
16
17    const MAX_SIZE: Option<usize> = match T::MAX_SIZE {
18        Some(v) => Some(8 + v),
19        None => None,
20    };
21
22    fn write_to<I: Write>(&self, out: &mut I) -> std::io::Result<usize> {
23        let mut sum = 0;
24        sum += self.request_id.write_to(out)?;
25        sum += self.content.write_to(out)?;
26        Ok(sum)
27    }
28
29    fn read_from<I: Read>(read: &mut I) -> std::io::Result<Self> {
30        Ok(ControlRpcMessage {
31            request_id: read.read_u64::<BigEndian>()?,
32            content: T::read_from(read)?,
33        })
34    }
35}