diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib.rs | 1 | ||||
| -rw-r--r-- | src/message/signalproxy/objects/coreinfo.rs | 6 | ||||
| -rw-r--r-- | src/message/signalproxy/objects/ircuser.rs | 22 | ||||
| -rw-r--r-- | src/primitive/datetime.rs | 40 | ||||
| -rw-r--r-- | src/primitive/message.rs | 1 | ||||
| -rw-r--r-- | src/primitive/variant.rs | 108 |
6 files changed, 96 insertions, 82 deletions
@@ -1,3 +1,4 @@ +#![allow(unused_variables, unused_imports)] #![cfg_attr(all(test, feature = "bench"), feature(test))] #[cfg(all(test, feature = "bench"))] extern crate test; diff --git a/src/message/signalproxy/objects/coreinfo.rs b/src/message/signalproxy/objects/coreinfo.rs index 7b3009a..4567762 100644 --- a/src/message/signalproxy/objects/coreinfo.rs +++ b/src/message/signalproxy/objects/coreinfo.rs @@ -1,7 +1,7 @@ use libquassel_derive::{NetworkList, NetworkMap}; use crate::message::signalproxy::translation::NetworkMap; -use crate::message::{Syncable, Class}; +use crate::message::{Class, Syncable}; use crate::primitive::{DateTime, StringList}; #[derive(Default, Debug, Clone, PartialEq, NetworkList, NetworkMap)] @@ -68,7 +68,7 @@ pub struct CoreData { #[network( rename = "sessionConnectedClientData", variant = "VariantList", - network = "map", + network = "map" )] pub session_connected_client_data: Vec<ConnectedClient>, } @@ -78,7 +78,7 @@ impl Default for CoreData { Self { quassel_version: Default::default(), quassel_build_date: Default::default(), - start_time:DateTime::unix_epoch(), + start_time: DateTime::UNIX_EPOCH, session_connected_clients: Default::default(), session_connected_client_data: Default::default(), } diff --git a/src/message/signalproxy/objects/ircuser.rs b/src/message/signalproxy/objects/ircuser.rs index b96ea95..61c4a2e 100644 --- a/src/message/signalproxy/objects/ircuser.rs +++ b/src/message/signalproxy/objects/ircuser.rs @@ -1,5 +1,5 @@ use crate::{ - message::{Syncable, Class}, + message::{Class, Syncable}, primitive::{DateTime, StringList}, }; @@ -45,7 +45,7 @@ pub struct IrcUser { impl IrcUser { pub fn add_user_modes(&mut self, modes: String) { for mode in modes.chars() { - if ! self.user_modes.contains(mode) { + if !self.user_modes.contains(mode) { self.user_modes.push(mode); } } @@ -65,12 +65,10 @@ impl IrcUser { sync!("removeUserModes", [modes]); } - pub fn update_hostmask(&mut self, mask: String) { - - } + pub fn update_hostmask(&mut self, mask: String) {} pub fn join_channel(&mut self, channel: String) { - if ! self.channels.contains(&channel) { + if !self.channels.contains(&channel) { self.channels.push(channel.clone()) } @@ -126,12 +124,12 @@ mod tests { account: s!(""), away: false, away_message: s!(""), - idle_time: OffsetDateTime::unix_epoch(), - login_time: OffsetDateTime::unix_epoch(), + idle_time: OffsetDateTime::UNIX_EPOCH, + login_time: OffsetDateTime::UNIX_EPOCH, server: s!(""), irc_operator: s!(""), // last_away_message: 0, - last_away_message_time: OffsetDateTime::unix_epoch(), + last_away_message_time: OffsetDateTime::UNIX_EPOCH, whois_service_reply: s!(""), suser_host: s!(""), encrypted: false, @@ -152,7 +150,7 @@ mod tests { s!("lastAwayMessageTime") => Variant::VariantList(vec! [ Variant::DateTime( - OffsetDateTime::unix_epoch() , + OffsetDateTime::UNIX_EPOCH, ), ], ), @@ -180,7 +178,7 @@ mod tests { s!("loginTime") => Variant::VariantList(vec! [ Variant::DateTime( - OffsetDateTime::unix_epoch() + OffsetDateTime::UNIX_EPOCH ), ], ), @@ -229,7 +227,7 @@ mod tests { s!("idleTime") => Variant::VariantList(vec! [ Variant::DateTime( - OffsetDateTime::unix_epoch() + OffsetDateTime::UNIX_EPOCH ), ], ), diff --git a/src/primitive/datetime.rs b/src/primitive/datetime.rs index 8d78b32..395830d 100644 --- a/src/primitive/datetime.rs +++ b/src/primitive/datetime.rs @@ -46,7 +46,7 @@ impl Serialize for OffsetDateTime { fn serialize(&self) -> Result<Vec<u8>, failure::Error> { let mut values: Vec<u8> = Vec::new(); - values.extend(i32::serialize(&(self.date().julian_day() as i32))?); + values.extend(i32::serialize(&(self.date().to_julian_day() as i32))?); let time: i32 = { let hour: i32 = self.time().hour() as i32; @@ -59,7 +59,7 @@ impl Serialize for OffsetDateTime { values.extend(i32::serialize(&time)?); values.extend(u8::serialize(&(TimeSpec::OffsetFromUTC as u8))?); - values.extend(i32::serialize(&self.offset().as_seconds())?); + values.extend(i32::serialize(&self.offset().whole_seconds())?); Ok(values) } @@ -77,13 +77,13 @@ impl Deserialize for OffsetDateTime { // Default to unix epoch when one of these is set to -1 if julian_day == -1 || millis_of_day == -1 { - return Ok((pos, OffsetDateTime::unix_epoch())); + return Ok((pos, OffsetDateTime::UNIX_EPOCH)); } let offset: UtcOffset; match zone { TimeSpec::LocalUnknown | TimeSpec::LocalStandard | TimeSpec::LocalDST => { - offset = UtcOffset::try_current_local_offset().unwrap_or_else(|_| { + offset = UtcOffset::current_local_offset().unwrap_or_else(|_| { log::warn!("could not get local offset defaulting to utc"); UtcOffset::UTC }) @@ -92,19 +92,18 @@ impl Deserialize for OffsetDateTime { TimeSpec::OffsetFromUTC => { let (_, tmp_offset) = i32::parse(&b[9..13])?; pos += 4; - offset = UtcOffset::seconds(tmp_offset) + offset = UtcOffset::from_whole_seconds(tmp_offset).unwrap_or(UtcOffset::UTC) } } - let date = Date::from_julian_day(julian_day as i64); + let date = Date::from_julian_day(julian_day)?; let hour = millis_of_day / 60 / 60000; let minute = (millis_of_day - (hour * 60 * 60000)) / 60000; let seconds = (millis_of_day - (hour * 60 * 60000) - (minute * 60000)) / 1000; let millis = millis_of_day - (hour * 60 * 60000) - (minute * 60000) - (seconds * 1000); - let time = - Time::try_from_hms_milli(hour as u8, minute as u8, seconds as u8, millis as u16)?; + let time = Time::from_hms_milli(hour as u8, minute as u8, seconds as u8, millis as u16)?; let primitivedatetime = PrimitiveDateTime::new(date, time); let datetime = primitivedatetime.assume_offset(offset); @@ -116,7 +115,7 @@ impl Serialize for Date { fn serialize(&self) -> Result<Vec<std::primitive::u8>, failure::Error> { let mut values: Vec<u8> = Vec::new(); - values.extend(i32::serialize(&(self.julian_day() as i32))?); + values.extend(i32::serialize(&(self.to_julian_day() as i32))?); Ok(values) } @@ -125,7 +124,7 @@ impl Serialize for Date { impl Deserialize for Date { fn parse(b: &[std::primitive::u8]) -> Result<(std::primitive::usize, Self), failure::Error> { let (_, julian_day) = i32::parse(&b[0..4])?; - let date = Date::from_julian_day(julian_day as i64); + let date = Date::from_julian_day(julian_day)?; Ok((4, date)) } @@ -159,8 +158,7 @@ impl Deserialize for Time { let seconds = (millis_of_day - (hour * 60 * 60000) - (minute * 60000)) / 1000; let millis = millis_of_day - (hour * 60 * 60000) - (minute * 60000) - (seconds * 1000); - let time = - Time::try_from_hms_milli(hour as u8, minute as u8, seconds as u8, millis as u16)?; + let time = Time::from_hms_milli(hour as u8, minute as u8, seconds as u8, millis as u16)?; Ok((4, time)) } @@ -168,7 +166,13 @@ impl Deserialize for Time { #[test] pub fn datetime_serialize() { - let datetime = DateTime::parse("2020-02-19 13:00 +0200", "%Y-%m-%d %R %z").unwrap(); + let datetime = DateTime::parse( + "2020-02-19 13:00 +0200", + time::macros::format_description!( + "[year]-[month]-[day] [hour]:[minute] [offset_hour sign:mandatory][offset_minute]" + ), + ) + .unwrap(); let sers = datetime.serialize().unwrap(); let bytes = vec![0, 37, 133, 19, 2, 202, 28, 128, 3, 0, 0, 28, 32]; @@ -178,7 +182,13 @@ pub fn datetime_serialize() { #[test] pub fn datetime_deserialize() { - let datetime = DateTime::parse("2020-02-19 13:00 +0200", "%Y-%m-%d %R %z").unwrap(); + let datetime = DateTime::parse( + "2020-02-19 13:00 +0200", + time::macros::format_description!( + "[year]-[month]-[day] [hour]:[minute] [offset_hour sign:mandatory][offset_minute]" + ), + ) + .unwrap(); let bytes = vec![0, 37, 133, 19, 2, 202, 28, 128, 3, 0, 0, 28, 32]; let (_, res): (usize, DateTime) = Deserialize::parse(&bytes).unwrap(); @@ -188,7 +198,7 @@ pub fn datetime_deserialize() { #[test] pub fn datetime_deserialize_epoch() { - let datetime = DateTime::unix_epoch(); + let datetime = DateTime::UNIX_EPOCH; let bytes = vec![0, 37, 133, 19, 0xff, 0xff, 0xff, 0xff, 3, 0, 0, 28, 32]; let (_, res): (usize, DateTime) = Deserialize::parse(&bytes).unwrap(); diff --git a/src/primitive/message.rs b/src/primitive/message.rs index 12edb29..27d60f5 100644 --- a/src/primitive/message.rs +++ b/src/primitive/message.rs @@ -198,6 +198,7 @@ impl Deserialize for Message { use bitflags::bitflags; bitflags! { + #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] pub struct MessageType: i32 { const NONE = 0x00000000; const PLAIN = 0x00000001; diff --git a/src/primitive/variant.rs b/src/primitive/variant.rs index b306ea7..46334a0 100644 --- a/src/primitive/variant.rs +++ b/src/primitive/variant.rs @@ -434,6 +434,8 @@ impl Deserialize for Variant { #[cfg(test)] mod tests { + use time::macros::format_description; + use super::*; #[test] @@ -460,10 +462,7 @@ mod tests { i_n_64.serialize().unwrap(), [0, 0, 0, 129, 0, 255, 252, 253, 100, 160, 148, 133, 168] ); - assert_eq!( - i_n_32.serialize().unwrap(), - [0, 0, 0, 2, 0, 202, 122, 245, 31] - ); + assert_eq!(i_n_32.serialize().unwrap(), [0, 0, 0, 2, 0, 202, 122, 245, 31]); assert_eq!(i_n_16.serialize().unwrap(), [0, 0, 0, 130, 0, 224, 13]); assert_eq!(i_n_8.serialize().unwrap(), [0, 0, 0, 131, 0, 178]); } @@ -496,8 +495,7 @@ mod tests { let i_n_16 = Variant::i16(-8179); let i_n_8 = Variant::i8(-78); - let (_, v_i_64) = - Variant::parse(&[0, 0, 0, 129, 0, 0, 3, 2, 155, 95, 107, 122, 88]).unwrap(); + let (_, v_i_64) = Variant::parse(&[0, 0, 0, 129, 0, 0, 3, 2, 155, 95, 107, 122, 88]).unwrap(); let (_, v_i_32) = Variant::parse(&[0, 0, 0, 2, 0, 53, 133, 10, 225]).unwrap(); let (_, v_i_16) = Variant::parse(&[0, 0, 0, 130, 0, 31, 243]).unwrap(); let (_, v_i_8) = Variant::parse(&[0, 0, 0, 131, 0, 78]).unwrap(); @@ -526,8 +524,7 @@ mod tests { let u_16 = Variant::u16(8179); let u_8 = Variant::u8(78); - let (_, v_u_64) = - Variant::parse(&[0, 0, 0, 132, 0, 0, 3, 2, 155, 95, 107, 122, 88]).unwrap(); + let (_, v_u_64) = Variant::parse(&[0, 0, 0, 132, 0, 0, 3, 2, 155, 95, 107, 122, 88]).unwrap(); let (_, v_u_32) = Variant::parse(&[0, 0, 0, 3, 0, 53, 133, 10, 225]).unwrap(); let (_, v_u_16) = Variant::parse(&[0, 0, 0, 133, 0, 31, 243]).unwrap(); let (_, v_u_8) = Variant::parse(&[0, 0, 0, 134, 0, 78]).unwrap(); @@ -579,8 +576,8 @@ mod tests { let mut test_variantmap = VariantMap::new(); test_variantmap.insert("Configured".to_string(), Variant::bool(true)); let bytes = [ - 0, 0, 0, 1, 0, 0, 0, 20, 0, 67, 0, 111, 0, 110, 0, 102, 0, 105, 0, 103, 0, 117, 0, 114, - 0, 101, 0, 100, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 1, 0, 0, 0, 20, 0, 67, 0, 111, 0, 110, 0, 102, 0, 105, 0, 103, 0, 117, 0, 114, 0, 101, + 0, 100, 0, 0, 0, 1, 0, 1, ] .to_vec(); assert_eq!(test_variantmap.serialize().unwrap(), bytes); @@ -589,8 +586,8 @@ mod tests { #[test] pub fn variantmap_deserialize() { let test_bytes: &[u8] = &[ - 0, 0, 0, 1, 0, 0, 0, 20, 0, 67, 0, 111, 0, 110, 0, 102, 0, 105, 0, 103, 0, 117, 0, 114, - 0, 101, 0, 100, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 1, 0, 0, 0, 20, 0, 67, 0, 111, 0, 110, 0, 102, 0, 105, 0, 103, 0, 117, 0, 114, 0, 101, + 0, 100, 0, 0, 0, 1, 0, 1, ]; let (len, res) = VariantMap::parse(test_bytes).unwrap(); let mut test_variantmap = VariantMap::new(); @@ -609,8 +606,8 @@ mod tests { }; let bytes = vec![ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x4, 0x74, 0x65, 0x73, 0x74, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x74, + 0x65, 0x73, 0x74, ]; assert_eq!(test_buffer_info.serialize().unwrap(), bytes); } @@ -625,8 +622,8 @@ mod tests { }; let bytes = vec![ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x5, 0x74, 0x65, 0x73, 0x74, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0x74, + 0x65, 0x73, 0x74, 0x0, ]; let (len, res) = BufferInfo::parse(&bytes).unwrap(); @@ -636,10 +633,7 @@ mod tests { #[test] fn char_serialize() { - assert_eq!( - Variant::char('z').serialize().unwrap(), - [0, 0, 0, 7, 0, 0, 122] - ); + assert_eq!(Variant::char('z').serialize().unwrap(), [0, 0, 0, 7, 0, 0, 122]); } #[test] @@ -658,23 +652,23 @@ mod tests { assert_eq!( Variant::String(test_string.clone()).serialize().unwrap(), [ - 0, 0, 0, 10, 0, 0, 0, 0, 36, 0, 0x54, 0, 0x68, 0, 0x69, 0, 0x73, 0, 0x20, 0, 0x69, - 0, 0x73, 0, 0x20, 0, 0x61, 0, 0x20, 0, 0x54, 0, 0x65, 0, 0x73, 0, 0x74, 0, 0x21, 0, - 0x31, 0, 0x21, 0, 0x21 + 0, 0, 0, 10, 0, 0, 0, 0, 36, 0, 0x54, 0, 0x68, 0, 0x69, 0, 0x73, 0, 0x20, 0, 0x69, 0, 0x73, + 0, 0x20, 0, 0x61, 0, 0x20, 0, 0x54, 0, 0x65, 0, 0x73, 0, 0x74, 0, 0x21, 0, 0x31, 0, 0x21, 0, + 0x21 ] ); assert_eq!( Variant::ByteArray(test_string.clone()).serialize().unwrap(), [ - 0, 0, 0, 12, 0, 0, 0, 0, 18, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, - 0x20, 0x54, 0x65, 0x73, 0x74, 0x21, 0x31, 0x21, 0x21 + 0, 0, 0, 12, 0, 0, 0, 0, 18, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, + 0x54, 0x65, 0x73, 0x74, 0x21, 0x31, 0x21, 0x21 ] ); assert_eq!( Variant::StringList(test_string_list).serialize().unwrap(), [ - 0, 0, 0, 11, 0, 0, 0, 0, 2, 0, 0, 0, 10, 0, 0x74, 0, 0x65, 0, 0x73, 0, 0x74, 0, - 0x31, 0, 0, 0, 12, 0, 0x74, 0, 0x65, 0, 0x73, 0, 0x74, 0, 0x20, 0, 0x32 + 0, 0, 0, 11, 0, 0, 0, 0, 2, 0, 0, 0, 10, 0, 0x74, 0, 0x65, 0, 0x73, 0, 0x74, 0, 0x31, 0, 0, + 0, 12, 0, 0x74, 0, 0x65, 0, 0x73, 0, 0x74, 0, 0x20, 0, 0x32 ] ); } @@ -685,19 +679,18 @@ mod tests { let test_string_list = vec!["test1".to_string(), "test 2".to_string()]; let test_string_src = vec![ - 0, 0, 0, 10, 0, 0, 0, 0, 36, 0, 0x54, 0, 0x68, 0, 0x69, 0, 0x73, 0, 0x20, 0, 0x69, 0, - 0x73, 0, 0x20, 0, 0x61, 0, 0x20, 0, 0x54, 0, 0x65, 0, 0x73, 0, 0x74, 0, 0x21, 0, 0x31, - 0, 0x21, 0, 0x21, + 0, 0, 0, 10, 0, 0, 0, 0, 36, 0, 0x54, 0, 0x68, 0, 0x69, 0, 0x73, 0, 0x20, 0, 0x69, 0, 0x73, 0, + 0x20, 0, 0x61, 0, 0x20, 0, 0x54, 0, 0x65, 0, 0x73, 0, 0x74, 0, 0x21, 0, 0x31, 0, 0x21, 0, 0x21, ]; let test_string_src_utf8 = vec![ - 0, 0, 0, 12, 0, 0, 0, 0, 18, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, - 0x20, 0x54, 0x65, 0x73, 0x74, 0x21, 0x31, 0x21, 0x21, 0, + 0, 0, 0, 12, 0, 0, 0, 0, 18, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x54, + 0x65, 0x73, 0x74, 0x21, 0x31, 0x21, 0x21, 0, ]; let test_string_list_src = vec![ - 0, 0, 0, 11, 0, 0, 0, 0, 2, 0, 0, 0, 10, 0, 0x74, 0, 0x65, 0, 0x73, 0, 0x74, 0, 0x31, - 0, 0, 0, 12, 0, 0x74, 0, 0x65, 0, 0x73, 0, 0x74, 0, 0x20, 0, 0x32, + 0, 0, 0, 11, 0, 0, 0, 0, 2, 0, 0, 0, 10, 0, 0x74, 0, 0x65, 0, 0x73, 0, 0x74, 0, 0x31, 0, 0, 0, + 12, 0, 0x74, 0, 0x65, 0, 0x73, 0, 0x74, 0, 0x20, 0, 0x32, ]; assert_eq!( @@ -716,38 +709,49 @@ mod tests { #[test] fn datetime_serialize() { - let datetime = - Variant::DateTime(DateTime::parse("2020-02-19 13:00 +0200", "%Y-%m-%d %R %z").unwrap()); - let date = Variant::Date(Date::parse("2020-02-19", "%Y-%m-%d").unwrap()); - let time = Variant::Time(Time::parse("13:00", "%R").unwrap()); + let datetime = Variant::DateTime( + DateTime::parse( + "2020-02-19 13:00 +0200", + format_description!( + "[year]-[month]-[day] [hour]:[minute] [offset_hour sign:mandatory][offset_minute]" + ), + ) + .unwrap(), + ); + + let date = + Variant::Date(Date::parse("2020-02-19", format_description!("[year]-[month]-[day]")).unwrap()); + let time = Variant::Time(Time::parse("13:00", format_description!("[hour]:[minute]")).unwrap()); assert_eq!( datetime.serialize().unwrap(), [0, 0, 0, 0x10, 0, 0, 37, 133, 19, 2, 202, 28, 128, 3, 0, 0, 28, 32] ); - assert_eq!( - date.serialize().unwrap(), - [0, 0, 0, 0x0e, 0, 0, 37, 133, 19] - ); + assert_eq!(date.serialize().unwrap(), [0, 0, 0, 0x0e, 0, 0, 37, 133, 19]); - assert_eq!( - time.serialize().unwrap(), - [0, 0, 0, 0x0f, 0, 2, 202, 28, 128] - ); + assert_eq!(time.serialize().unwrap(), [0, 0, 0, 0x0f, 0, 2, 202, 28, 128]); } #[test] fn datetime_deserialize() { - let datetime = - Variant::DateTime(DateTime::parse("2020-02-19 13:00 +0200", "%Y-%m-%d %R %z").unwrap()); - let date = Variant::Date(Date::parse("2020-02-19", "%Y-%m-%d").unwrap()); - let time = Variant::Time(Time::parse("13:00", "%R").unwrap()); + let datetime = Variant::DateTime( + DateTime::parse( + "2020-02-19 13:00 +0200", + format_description!( + "[year]-[month]-[day] [hour]:[minute] [offset_hour sign:mandatory][offset_minute]" + ), + ) + .unwrap(), + ); + + let date = + Variant::Date(Date::parse("2020-02-19", format_description!("[year]-[month]-[day]")).unwrap()); + let time = Variant::Time(Time::parse("13:00", format_description!("[hour]:[minute]")).unwrap()); assert_eq!( (18, datetime), - Variant::parse(&[0, 0, 0, 0x10, 0, 0, 37, 133, 19, 2, 202, 28, 128, 3, 0, 0, 28, 32]) - .unwrap() + Variant::parse(&[0, 0, 0, 0x10, 0, 0, 37, 133, 19, 2, 202, 28, 128, 3, 0, 0, 28, 32]).unwrap() ); assert_eq!( |
