aboutsummaryrefslogtreecommitdiff
path: root/src/primitive
diff options
context:
space:
mode:
Diffstat (limited to 'src/primitive')
-rw-r--r--src/primitive/bufferinfo.rs3
-rw-r--r--src/primitive/datetime.rs3
-rw-r--r--src/primitive/message.rs8
-rw-r--r--src/primitive/signedint.rs2
-rw-r--r--src/primitive/string.rs10
-rw-r--r--src/primitive/stringlist.rs2
-rw-r--r--src/primitive/unsignedint.rs2
-rw-r--r--src/primitive/variant.rs30
-rw-r--r--src/primitive/variantlist.rs2
-rw-r--r--src/primitive/variantmap.rs7
10 files changed, 45 insertions, 24 deletions
diff --git a/src/primitive/bufferinfo.rs b/src/primitive/bufferinfo.rs
index 24080cb..97d9408 100644
--- a/src/primitive/bufferinfo.rs
+++ b/src/primitive/bufferinfo.rs
@@ -2,8 +2,7 @@ use std::vec::Vec;
use failure::Error;
-use crate::{Deserialize, DeserializeUTF8};
-use crate::{Serialize, SerializeUTF8};
+use crate::{deserialize::*, serialize::*};
/// The BufferInfo struct represents a BufferInfo as received in IRC
///
diff --git a/src/primitive/datetime.rs b/src/primitive/datetime.rs
index e4c4c83..8d78b32 100644
--- a/src/primitive/datetime.rs
+++ b/src/primitive/datetime.rs
@@ -1,5 +1,4 @@
-use crate::Deserialize;
-use crate::Serialize;
+use crate::{deserialize::*, serialize::*};
use time::{OffsetDateTime, PrimitiveDateTime, UtcOffset};
diff --git a/src/primitive/message.rs b/src/primitive/message.rs
index 04c427e..36a55c5 100644
--- a/src/primitive/message.rs
+++ b/src/primitive/message.rs
@@ -1,9 +1,10 @@
use std::vec::Vec;
+use num_derive::{FromPrimitive, ToPrimitive};
+
use failure::Error;
-use crate::{Deserialize, DeserializeUTF8};
-use crate::{Serialize, SerializeUTF8};
+use crate::{deserialize::*, serialize::*};
use crate::primitive::BufferInfo;
@@ -171,8 +172,9 @@ impl Deserialize for Message {
}
#[repr(i32)]
-#[derive(Copy, Clone, Debug, std::cmp::PartialEq)]
+#[derive(Copy, Clone, Debug, std::cmp::PartialEq, FromPrimitive, ToPrimitive)]
pub enum MessageType {
+ None = 0x00000000,
Plain = 0x00000001,
Notice = 0x00000002,
Action = 0x00000004,
diff --git a/src/primitive/signedint.rs b/src/primitive/signedint.rs
index a1254fb..2d2029d 100644
--- a/src/primitive/signedint.rs
+++ b/src/primitive/signedint.rs
@@ -6,7 +6,7 @@ use std::vec::Vec;
use failure::Error;
-use crate::{Deserialize, Serialize};
+use crate::{deserialize::*, serialize::*};
impl Serialize for i64 {
fn serialize(&self) -> Result<Vec<u8>, Error> {
diff --git a/src/primitive/string.rs b/src/primitive/string.rs
index 7ea838d..478bc0a 100644
--- a/src/primitive/string.rs
+++ b/src/primitive/string.rs
@@ -8,9 +8,7 @@ use failure::Error;
use log::trace;
use crate::util;
-use crate::{Deserialize, DeserializeUTF8, Serialize, SerializeUTF8};
-
-pub type ByteArray = String;
+use crate::{deserialize::*, serialize::*};
/// We Shadow the String type here as we can only use impl on types in our own scope.
///
@@ -21,10 +19,8 @@ impl Serialize for String {
fn serialize(&self) -> Result<Vec<u8>, Error> {
let mut res: Vec<u8> = Vec::new();
- let utf16: Vec<u16> = self.encode_utf16().collect();
- for i in utf16 {
- res.extend(i.to_be_bytes().iter());
- }
+ self.encode_utf16()
+ .for_each(|i| res.extend(i.to_be_bytes().iter()));
util::prepend_byte_len(&mut res);
return Ok(res);
diff --git a/src/primitive/stringlist.rs b/src/primitive/stringlist.rs
index df6d281..ceea63e 100644
--- a/src/primitive/stringlist.rs
+++ b/src/primitive/stringlist.rs
@@ -8,7 +8,7 @@ use failure::Error;
use log::trace;
-use crate::{Deserialize, Serialize};
+use crate::{deserialize::*, serialize::*};
/// StringList are represented as a Vec of Strings
///
diff --git a/src/primitive/unsignedint.rs b/src/primitive/unsignedint.rs
index 6e91e2a..90ec696 100644
--- a/src/primitive/unsignedint.rs
+++ b/src/primitive/unsignedint.rs
@@ -8,7 +8,7 @@ use std::vec::Vec;
use failure::Error;
use crate::error::ProtocolError;
-use crate::{Deserialize, Serialize};
+use crate::{deserialize::*, serialize::*};
impl Serialize for bool {
fn serialize(&self) -> Result<Vec<u8>, Error> {
diff --git a/src/primitive/variant.rs b/src/primitive/variant.rs
index 8a98d59..efe69b8 100644
--- a/src/primitive/variant.rs
+++ b/src/primitive/variant.rs
@@ -7,8 +7,7 @@ use log::{error, trace};
use crate::error::ProtocolError;
use crate::primitive;
use crate::primitive::StringList;
-use crate::{Deserialize, DeserializeUTF8};
-use crate::{Serialize, SerializeUTF8};
+use crate::{deserialize::*, serialize::*};
use crate::primitive::{BufferInfo, Date, DateTime, Message, Time, VariantList, VariantMap};
@@ -35,6 +34,7 @@ pub enum Variant {
DateTime(DateTime),
VariantMap(VariantMap),
VariantList(VariantList),
+ #[from(ignore)]
String(String),
#[from(ignore)]
ByteArray(String),
@@ -50,6 +50,32 @@ pub enum Variant {
i8(i8),
}
+impl From<Variant> for String {
+ fn from(input: Variant) -> Self {
+ match input {
+ Variant::String(value) => value,
+ Variant::ByteArray(value) => value,
+ _ => panic!("unknown variant expected string or bytearray"),
+ }
+ }
+}
+
+impl From<&Variant> for String {
+ fn from(input: &Variant) -> Self {
+ match input {
+ Variant::String(value) => value.clone(),
+ Variant::ByteArray(value) => value.clone(),
+ _ => panic!("unknown variant expected string or bytearray"),
+ }
+ }
+}
+
+impl From<String> for Variant {
+ fn from(input: String) -> Self {
+ Self::String(input)
+ }
+}
+
impl Serialize for Variant {
fn serialize(&self) -> Result<Vec<u8>, Error> {
let unknown: u8 = 0x00;
diff --git a/src/primitive/variantlist.rs b/src/primitive/variantlist.rs
index 7e74122..2d20ae2 100644
--- a/src/primitive/variantlist.rs
+++ b/src/primitive/variantlist.rs
@@ -5,7 +5,7 @@ use failure::Error;
use log::trace;
-use crate::{Deserialize, Serialize};
+use crate::{deserialize::*, serialize::*};
use crate::primitive::Variant;
diff --git a/src/primitive/variantmap.rs b/src/primitive/variantmap.rs
index d43028c..8c1032d 100644
--- a/src/primitive/variantmap.rs
+++ b/src/primitive/variantmap.rs
@@ -5,8 +5,7 @@ use failure::Error;
use log::trace;
-use crate::Deserialize;
-use crate::Serialize;
+use crate::{deserialize::*, serialize::*};
use crate::primitive::Variant;
use crate::util;
@@ -40,11 +39,11 @@ impl Deserialize for VariantMap {
let mut pos: usize = 4;
let mut map = VariantMap::new();
for _ in 0..len {
- trace!(target: "primitive::VariantMap", "Parsing entry name");
+ trace!(target: "primitive::VariantMap", "Parsing entry name {:x?}", &b[pos..]);
let (nlen, name) = String::parse(&b[pos..])?;
pos += nlen;
- trace!(target: "primitive::VariantMap", "Parsing entry: {:?} with len {:?}", name, &b[(pos)..(pos + 4)]);
+ trace!(target: "primitive::VariantMap", "Parsing entry: {:?} with type {:x?}", name, &b[(pos)..(pos + 4)]);
let (vlen, value) = Variant::parse(&b[(pos)..])?;
pos += vlen;