diff options
Diffstat (limited to 'src/primitive')
| -rw-r--r-- | src/primitive/bufferinfo.rs | 3 | ||||
| -rw-r--r-- | src/primitive/datetime.rs | 3 | ||||
| -rw-r--r-- | src/primitive/message.rs | 8 | ||||
| -rw-r--r-- | src/primitive/signedint.rs | 2 | ||||
| -rw-r--r-- | src/primitive/string.rs | 10 | ||||
| -rw-r--r-- | src/primitive/stringlist.rs | 2 | ||||
| -rw-r--r-- | src/primitive/unsignedint.rs | 2 | ||||
| -rw-r--r-- | src/primitive/variant.rs | 30 | ||||
| -rw-r--r-- | src/primitive/variantlist.rs | 2 | ||||
| -rw-r--r-- | src/primitive/variantmap.rs | 7 |
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; |
