aboutsummaryrefslogtreecommitdiff
path: root/src/primitive/bufferinfo.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/primitive/bufferinfo.rs')
-rw-r--r--src/primitive/bufferinfo.rs81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/primitive/bufferinfo.rs b/src/primitive/bufferinfo.rs
new file mode 100644
index 0000000..9cbaa2d
--- /dev/null
+++ b/src/primitive/bufferinfo.rs
@@ -0,0 +1,81 @@
+use std::vec::Vec;
+
+use failure::Error;
+
+use crate::{Deserialize, DeserializeUTF8};
+use crate::{Serialize, SerializeUTF8};
+
+extern crate bytes;
+
+/// The BufferInfo struct represents a BufferInfo as received in IRC
+///
+/// BufferInfo is, like all other struct based types, serialized sequentially.
+#[derive(Clone, Debug, std::cmp::PartialEq)]
+pub struct BufferInfo {
+ /// a unique, sequential id for the buffer
+ pub id: i32,
+ /// NetworkId of the network the buffer belongs to
+ pub network_id: i32,
+ /// The Type of the Buffer
+ pub buffer_type: BufferType,
+ /// BufferName as displayed to the user
+ pub name: String,
+}
+
+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 undocumented 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,
+ },
+ ));
+ }
+}
+
+/// The Type of the Buffer
+#[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!(),
+ }
+ }
+}
ct'>handle CTCP ACTION in sed moduleMax Audron-2/+16 2021-09-07put benchmark behind feature flag we can compile using stable rustMax Audron-7/+17 2021-09-07handle error cases in sed moduleMax Audron-8/+15 2021-06-29add rmr to channels1.3.2Max Audron-1/+1 2021-06-28>.>: add . as eyeMax Audron-1/+1 2021-06-28add lmr to channels1.3.1Max Audron-1/+1 2021-06-23rewrite sed regex to work cross channelMax Audron-115/+141 2021-06-23add required metadata for publishing to macros crateMax Audron-5/+12 2021-06-23add ability to use path and dotted syntax for functionsMax Audron-8/+39 2021-06-21publish macros subcrateMax Audron-20/+20 2021-06-13release version 1.2.1Max Audron-2/+2 * fix crash on empty message 2021-06-13fix crash on message only containing whitespaceMax Audron-1/+4 2021-06-11Release version 1.2.01.2.0Max Audron-2/+2 * add pet command 2021-06-06make pet more compactR0flcopt3r/catinator-pet-commandMax Audron-5/+5 2021-06-05feat: adds pet command.R0flcopt3r-0/+90 When petting the cat it will reply with some random action. 2021-06-05feat: send actionR0flcopt3r-1/+9 2021-06-05release version 1.1.0Max Audron-2/+2 2021-06-05document proc macrosMax Audron-4/+97 2021-06-05add intensifyMax Audron-3/+27 2021-06-05add privmsg macroMax Audron-2/+40 2021-06-05fix jb remote urlsMax Audron-4/+4 2021-06-05remove egress gateway configMax Audron-10/+0 2021-06-05update tanka dependenciesMax Audron-8/+8 2021-06-05fix init container nameMax Audron-1/+1 2021-06-05fix tanka dependency pathMax Audron-8/+8 2021-06-05switch to https url for tanka util libMax Audron-2/+2 2021-06-05bump version to 1.0.2Max Audron-2/+2 2021-06-05add tanka ci configurationMax Audron-1/+1 2021-06-05ready tanka deploy for CIMax Audron-32/+69 2021-06-05remove tanka vendoringMax Audron-27651/+0 2021-05-26Release 1.0.1Max Audron-3/+3 2021-05-26fix log breaking once buffer fullMax Audron-2/+33 the log_msg function was poping the newest message and replacing it with the newest message, it should be poping the oldest messages. 2021-05-16add deployment stuffMax Audron-6/+27786 2021-05-15add container buildMax Audron-2/+35