playit-agent-proto 1.1.1

Contains the protocol messages for a playit.gg agent
Documentation
use std::io::{Read, Write};
use byteorder::{BigEndian, ReadBytesExt};
use crate::MessageEncoding;

#[derive(Debug, Eq, PartialEq, Clone)]
pub struct ControlRpcMessage<T: MessageEncoding> {
    pub request_id: u64,
    pub content: T,
}

impl<T: MessageEncoding> MessageEncoding for ControlRpcMessage<T> {
    const STATIC_SIZE: Option<usize> = match T::STATIC_SIZE {
        Some(v) => Some(8 + v),
        None => None,
    };

    const MAX_SIZE: Option<usize> = match T::MAX_SIZE {
        Some(v) => Some(8 + v),
        None => None,
    };

    fn write_to<I: Write>(&self, out: &mut I) -> std::io::Result<usize> {
        let mut sum = 0;
        sum += self.request_id.write_to(out)?;
        sum += self.content.write_to(out)?;
        Ok(sum)
    }

    fn read_from<I: Read>(read: &mut I) -> std::io::Result<Self> {
        Ok(ControlRpcMessage {
            request_id: read.read_u64::<BigEndian>()?,
            content: T::read_from(read)?,
        })
    }
}