playit_agent_proto/
rpc.rs1use 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}