diff options
| author | Max Audron <audron@cocaine.farm> | 2020-04-29 00:00:44 +0200 |
|---|---|---|
| committer | Max Audron <audron@cocaine.farm> | 2020-04-29 00:00:44 +0200 |
| commit | fc64e11cdd35051a2ea87237f548ae0497a2f7f9 (patch) | |
| tree | c57937731898b0ffd66d1d95bb0f181cae568c37 /src/protocol/primitive/bufferinfo.rs | |
| parent | finish parsing of primitive types (diff) | |
refactor everything
Diffstat (limited to 'src/protocol/primitive/bufferinfo.rs')
| -rw-r--r-- | src/protocol/primitive/bufferinfo.rs | 74 |
1 files changed, 0 insertions, 74 deletions
diff --git a/src/protocol/primitive/bufferinfo.rs b/src/protocol/primitive/bufferinfo.rs deleted file mode 100644 index 4c69286..0000000 --- a/src/protocol/primitive/bufferinfo.rs +++ /dev/null @@ -1,74 +0,0 @@ -use std::vec::Vec; - -use failure::Error; - -use crate::protocol::primitive::deserialize::{Deserialize, DeserializeUTF8}; -use crate::protocol::primitive::serialize::{Serialize, SerializeUTF8}; -use crate::protocol::primitive::String; - -extern crate bytes; - -#[derive(Clone, Debug, std::cmp::PartialEq)] -pub struct BufferInfo { - pub id: i32, // a unique, sequential id for the buffer - pub network_id: i32, // NetworkId of the network the buffer belongs to - pub buffer_type: BufferType, - pub name: String, // BufferName as displayed to the user -} - -impl Serialize for BufferInfo { - fn serialize(&self) -> Result<Vec<u8>, Error> { - let mut values: Vec<u8> = Vec::new(); - - values.append(&mut i32::serialize(&self.id)?); - values.append(&mut i32::serialize(&self.network_id)?); - values.append(&mut i16::serialize(&(self.buffer_type as i16))?); - values.append(&mut vec![0, 0, 0, 0]); - values.append(&mut String::serialize_utf8(&self.name)?); - - Ok(values) - } -} - -impl Deserialize for BufferInfo { - fn parse(b: &[u8]) -> Result<(usize, Self), Error> { - let (_, id) = i32::parse(&b[0..4])?; - let (_, network_id) = i32::parse(&b[4..8])?; - let (_, buffer_type) = i16::parse(&b[8..10])?; - - // There are 4 additional undocumted Bytes in the BufferInfo - // so we start at byte 14 - let (size, name) = String::parse_utf8(&b[14..])?; - - return Ok(( - 14 + size, - Self { - id, - network_id, - buffer_type: BufferType::from(buffer_type), - name, - }, - )); - } -} - -#[repr(i16)] -#[derive(Copy, Clone, Debug, std::cmp::PartialEq)] -pub enum BufferType { - Status = 0x01, - Channel = 0x02, - Query = 0x04, - Group = 0x08, -} - -impl From<i16> for BufferType { - fn from(value: i16) -> Self { - match value { - 0x01 => return Self::Status, - 0x02 => return Self::Channel, - 0x04 => return Self::Query, - 0x08 => return Self::Group, - _ => unimplemented!(), - } - } -} |
