aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/deserialize.rs21
-rw-r--r--src/lib.rs5
-rw-r--r--src/message/handshake/connack.rs2
-rw-r--r--src/message/handshake/init.rs2
-rw-r--r--src/message/handshake/protocol.rs2
-rw-r--r--src/message/handshake/types.rs2
-rw-r--r--src/message/signalproxy/heartbeat.rs2
-rw-r--r--src/message/signalproxy/initdata.rs2
-rw-r--r--src/message/signalproxy/initrequest.rs2
-rw-r--r--src/message/signalproxy/mod.rs2
-rw-r--r--src/message/signalproxy/rpccall.rs2
-rw-r--r--src/message/signalproxy/syncmessage.rs2
-rw-r--r--src/primitive/bufferid.rs2
-rw-r--r--src/primitive/bufferinfo.rs2
-rw-r--r--src/primitive/datetime.rs10
-rw-r--r--src/primitive/message.rs2
-rw-r--r--src/primitive/msgid.rs2
-rw-r--r--src/primitive/peerptr.rs2
-rw-r--r--src/primitive/signedint.rs12
-rw-r--r--src/primitive/string.rs8
-rw-r--r--src/primitive/stringlist.rs6
-rw-r--r--src/primitive/unsignedint.rs14
-rw-r--r--src/primitive/variant.rs2
-rw-r--r--src/primitive/variantlist.rs6
-rw-r--r--src/primitive/variantmap.rs6
-rw-r--r--src/serialize.rs50
26 files changed, 80 insertions, 90 deletions
diff --git a/src/deserialize.rs b/src/deserialize.rs
deleted file mode 100644
index e13f21f..0000000
--- a/src/deserialize.rs
+++ /dev/null
@@ -1,21 +0,0 @@
-use crate::error::ProtocolError;
-
-/// Deserialization of types and structs to the quassel byteprotocol
-pub trait Deserialize {
- fn parse(b: &[u8]) -> Result<(usize, Self), ProtocolError>
- where
- Self: std::marker::Sized;
-}
-
-/// Deserialization of UTF-8 based Strings to the quassel byteprotocol
-pub trait DeserializeUTF8 {
- fn parse_utf8(b: &[u8]) -> Result<(usize, Self), ProtocolError>
- where
- Self: std::marker::Sized;
-}
-
-pub trait DeserializeVariant {
- fn parse_variant(b: &[u8]) -> Result<(usize, Self), ProtocolError>
- where
- Self: std::marker::Sized;
-}
diff --git a/src/lib.rs b/src/lib.rs
index a2daaa3..59581ae 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -32,12 +32,9 @@ compile_error!("feature \"client\" and feature \"server\" cannot be enabled at t
pub use crate::error::ProtocolError;
-/// Traits for Serialization of objects
+/// Traits for Serialization & Deserialization of objects
pub mod serialize;
-/// Traits for parsing objects
-pub mod deserialize;
-
/// HandshakeSerialize implements the serialization needed during the handhake phase.
///
/// The protocol has some minor differences during this phase compared to the regular parsing.
diff --git a/src/message/handshake/connack.rs b/src/message/handshake/connack.rs
index bed0cb5..d325cb9 100644
--- a/src/message/handshake/connack.rs
+++ b/src/message/handshake/connack.rs
@@ -41,7 +41,7 @@ impl crate::serialize::Serialize for ConnAck {
}
}
-impl crate::deserialize::Deserialize for ConnAck {
+impl crate::serialize::Deserialize for ConnAck {
fn parse(b: &[u8]) -> Result<(usize, Self), ProtocolError> {
let (flen, flags) = u8::parse(b)?;
let (elen, extra) = i16::parse(&b[flen..])?;
diff --git a/src/message/handshake/init.rs b/src/message/handshake/init.rs
index 51514ff..9f011ed 100644
--- a/src/message/handshake/init.rs
+++ b/src/message/handshake/init.rs
@@ -1,4 +1,4 @@
-use crate::{deserialize::Deserialize, serialize::Serialize};
+use crate::serialize::{Deserialize, Serialize};
/// The first few bytes sent to the core to initialize the connection and setup if we want to use tls and compression
#[derive(Clone, Debug)]
diff --git a/src/message/handshake/protocol.rs b/src/message/handshake/protocol.rs
index c12da05..73a82b9 100644
--- a/src/message/handshake/protocol.rs
+++ b/src/message/handshake/protocol.rs
@@ -1,4 +1,4 @@
-use crate::{deserialize::Deserialize, serialize::Serialize};
+use crate::serialize::{Deserialize, Serialize};
pub enum Protocol {
Legacy = 0x00000001,
diff --git a/src/message/handshake/types.rs b/src/message/handshake/types.rs
index fd8c8fa..bebeb4c 100644
--- a/src/message/handshake/types.rs
+++ b/src/message/handshake/types.rs
@@ -3,8 +3,8 @@ use std::vec::Vec;
use crate::error::ProtocolError;
use crate::primitive::Variant;
+use crate::serialize::{Deserialize, Serialize};
use crate::util;
-use crate::{deserialize::Deserialize, serialize::Serialize};
use crate::message::handshake::{HandshakeDeserialize, HandshakeSerialize};
use crate::primitive::VariantMap;
diff --git a/src/message/signalproxy/heartbeat.rs b/src/message/signalproxy/heartbeat.rs
index 32df3d4..9c952e5 100644
--- a/src/message/signalproxy/heartbeat.rs
+++ b/src/message/signalproxy/heartbeat.rs
@@ -1,7 +1,7 @@
use crate::error::ProtocolError;
use crate::message::MessageType;
use crate::primitive::{DateTime, Variant, VariantList};
-use crate::{deserialize::Deserialize, serialize::Serialize};
+use crate::serialize::{Deserialize, Serialize};
#[derive(Clone, Debug, std::cmp::PartialEq)]
pub struct HeartBeat {
diff --git a/src/message/signalproxy/initdata.rs b/src/message/signalproxy/initdata.rs
index 2b9fa18..efdd8d7 100644
--- a/src/message/signalproxy/initdata.rs
+++ b/src/message/signalproxy/initdata.rs
@@ -1,7 +1,7 @@
use crate::error::ProtocolError;
use crate::message::MessageType;
use crate::primitive::{Variant, VariantList};
-use crate::{deserialize::Deserialize, serialize::Serialize};
+use crate::serialize::{Deserialize, Serialize};
use super::objects::Types;
diff --git a/src/message/signalproxy/initrequest.rs b/src/message/signalproxy/initrequest.rs
index 79b6cbc..1990dba 100644
--- a/src/message/signalproxy/initrequest.rs
+++ b/src/message/signalproxy/initrequest.rs
@@ -1,7 +1,7 @@
use crate::error::ProtocolError;
use crate::message::MessageType;
use crate::primitive::{Variant, VariantList};
-use crate::{deserialize::Deserialize, serialize::Serialize};
+use crate::serialize::{Deserialize, Serialize};
#[derive(Clone, Debug, std::cmp::PartialEq)]
pub struct InitRequest {
diff --git a/src/message/signalproxy/mod.rs b/src/message/signalproxy/mod.rs
index 5801846..6cd887b 100644
--- a/src/message/signalproxy/mod.rs
+++ b/src/message/signalproxy/mod.rs
@@ -1,7 +1,7 @@
use crate::{
- deserialize::Deserialize,
error::ProtocolError,
primitive::{Variant, VariantList},
+ serialize::Deserialize,
serialize::Serialize,
};
diff --git a/src/message/signalproxy/rpccall.rs b/src/message/signalproxy/rpccall.rs
index 04c75cb..833fad9 100644
--- a/src/message/signalproxy/rpccall.rs
+++ b/src/message/signalproxy/rpccall.rs
@@ -2,7 +2,7 @@ use crate::error::ProtocolError;
use crate::message::MessageType;
use crate::primitive::Message;
use crate::primitive::{Variant, VariantList};
-use crate::{deserialize::Deserialize, serialize::Serialize};
+use crate::serialize::{Deserialize, Serialize};
#[derive(Clone, Debug, std::cmp::PartialEq)]
pub enum RpcCall {
diff --git a/src/message/signalproxy/syncmessage.rs b/src/message/signalproxy/syncmessage.rs
index b1123ac..94930af 100644
--- a/src/message/signalproxy/syncmessage.rs
+++ b/src/message/signalproxy/syncmessage.rs
@@ -1,7 +1,7 @@
use crate::error::ProtocolError;
use crate::message::MessageType;
use crate::primitive::{Variant, VariantList};
-use crate::{deserialize::Deserialize, serialize::Serialize};
+use crate::serialize::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub enum Class {
diff --git a/src/primitive/bufferid.rs b/src/primitive/bufferid.rs
index 1735473..844dd37 100644
--- a/src/primitive/bufferid.rs
+++ b/src/primitive/bufferid.rs
@@ -2,7 +2,7 @@
#[repr(transparent)]
pub struct BufferId(pub i32);
-use crate::{deserialize::*, error::ProtocolError, serialize::*};
+use crate::{error::ProtocolError, serialize::*};
use crate::serialize::UserType;
diff --git a/src/primitive/bufferinfo.rs b/src/primitive/bufferinfo.rs
index f2f13bf..56d5cce 100644
--- a/src/primitive/bufferinfo.rs
+++ b/src/primitive/bufferinfo.rs
@@ -1,7 +1,7 @@
use std::vec::Vec;
use crate::primitive::BufferId;
-use crate::{deserialize::*, error::ProtocolError, serialize::*};
+use crate::{error::ProtocolError, serialize::*};
use crate::serialize::UserType;
diff --git a/src/primitive/datetime.rs b/src/primitive/datetime.rs
index 2159af3..42f6d14 100644
--- a/src/primitive/datetime.rs
+++ b/src/primitive/datetime.rs
@@ -1,4 +1,4 @@
-use crate::{deserialize::*, error::ProtocolError, primitive, serialize::*};
+use crate::{error::ProtocolError, primitive, serialize::*};
use time::{OffsetDateTime, PrimitiveDateTime, UtcOffset};
@@ -18,7 +18,7 @@ use time::{OffsetDateTime, PrimitiveDateTime, UtcOffset};
pub type DateTime = OffsetDateTime;
pub use time::{Date, Time};
-use crate::serialize::SerializeVariant;
+use crate::serialize::VariantType;
/// TimeSpec specifies whether the time is a local time, daylightsaving local time or a form of UTC Offset
#[repr(i8)]
@@ -113,7 +113,7 @@ impl Deserialize for OffsetDateTime {
}
}
-impl SerializeVariant for OffsetDateTime {
+impl VariantType for OffsetDateTime {
const TYPE: u32 = primitive::QDATETIME;
}
@@ -136,7 +136,7 @@ impl Deserialize for Date {
}
}
-impl SerializeVariant for Date {
+impl VariantType for Date {
const TYPE: u32 = primitive::QDATE;
}
@@ -174,7 +174,7 @@ impl Deserialize for Time {
}
}
-impl SerializeVariant for Time {
+impl VariantType for Time {
const TYPE: u32 = primitive::QTIME;
}
diff --git a/src/primitive/message.rs b/src/primitive/message.rs
index bac3899..624ff49 100644
--- a/src/primitive/message.rs
+++ b/src/primitive/message.rs
@@ -1,7 +1,7 @@
use std::{collections::HashMap, vec::Vec};
use crate::error::ProtocolError;
-use crate::{deserialize::*, serialize::*};
+use crate::serialize::*;
use crate::primitive::{BufferInfo, MsgId};
diff --git a/src/primitive/msgid.rs b/src/primitive/msgid.rs
index 7f3e32f..9ae8d9c 100644
--- a/src/primitive/msgid.rs
+++ b/src/primitive/msgid.rs
@@ -6,7 +6,7 @@ pub struct MsgId(
);
use crate::error::ProtocolError;
-use crate::{deserialize::*, serialize::*};
+use crate::serialize::*;
use crate::serialize::UserType;
diff --git a/src/primitive/peerptr.rs b/src/primitive/peerptr.rs
index f2a3e05..499be41 100644
--- a/src/primitive/peerptr.rs
+++ b/src/primitive/peerptr.rs
@@ -1,5 +1,5 @@
use crate::{
- deserialize::Deserialize,
+ serialize::Deserialize,
serialize::{Serialize, SerializeUTF8},
};
diff --git a/src/primitive/signedint.rs b/src/primitive/signedint.rs
index d8361a3..6bf009f 100644
--- a/src/primitive/signedint.rs
+++ b/src/primitive/signedint.rs
@@ -4,9 +4,9 @@ use std::io::Cursor;
use std::result::Result;
use std::vec::Vec;
-use crate::{deserialize::*, error::ProtocolError, primitive, serialize::*};
+use crate::{error::ProtocolError, primitive, serialize::*};
-use crate::serialize::SerializeVariant;
+use crate::serialize::VariantType;
impl Serialize for i64 {
fn serialize(&self) -> Result<Vec<u8>, ProtocolError> {
@@ -21,7 +21,7 @@ impl Deserialize for i64 {
}
}
-impl SerializeVariant for i64 {
+impl VariantType for i64 {
const TYPE: u32 = primitive::LONG;
}
@@ -38,7 +38,7 @@ impl Deserialize for i32 {
}
}
-impl SerializeVariant for i32 {
+impl VariantType for i32 {
const TYPE: u32 = primitive::INT;
}
@@ -55,7 +55,7 @@ impl Deserialize for i16 {
}
}
-impl SerializeVariant for i16 {
+impl VariantType for i16 {
const TYPE: u32 = primitive::SHORT;
}
@@ -72,6 +72,6 @@ impl Deserialize for i8 {
}
}
-impl SerializeVariant for i8 {
+impl VariantType for i8 {
const TYPE: u32 = primitive::CHAR;
}
diff --git a/src/primitive/string.rs b/src/primitive/string.rs
index 1d6f0af..7f8ec58 100644
--- a/src/primitive/string.rs
+++ b/src/primitive/string.rs
@@ -5,9 +5,9 @@ use std::vec::Vec;
use log::trace;
-use crate::{deserialize::*, error::ProtocolError, primitive, serialize::*, util};
+use crate::{error::ProtocolError, primitive, serialize::*, util};
-use crate::serialize::SerializeVariant;
+use crate::serialize::VariantType;
impl Deserialize for char {
fn parse(b: &[u8]) -> Result<(usize, Self), ProtocolError> {
@@ -27,7 +27,7 @@ impl Serialize for char {
}
}
-impl SerializeVariant for char {
+impl VariantType for char {
const TYPE: u32 = crate::primitive::QCHAR;
}
@@ -46,7 +46,7 @@ impl SerializeUTF8 for String {
}
}
-impl SerializeVariant for String {
+impl VariantType for String {
const TYPE: u32 = primitive::QSTRING;
}
diff --git a/src/primitive/stringlist.rs b/src/primitive/stringlist.rs
index f76e95d..292557f 100644
--- a/src/primitive/stringlist.rs
+++ b/src/primitive/stringlist.rs
@@ -5,9 +5,9 @@ use std::vec::Vec;
use log::trace;
-use crate::{deserialize::*, error::ProtocolError, serialize::*};
+use crate::{error::ProtocolError, serialize::*};
-use crate::serialize::SerializeVariant;
+use crate::serialize::VariantType;
/// StringList are represented as a Vec of Strings
///
@@ -47,7 +47,7 @@ impl Deserialize for StringList {
}
}
-impl SerializeVariant for StringList {
+impl VariantType for StringList {
const TYPE: u32 = crate::primitive::QSTRINGLIST;
}
diff --git a/src/primitive/unsignedint.rs b/src/primitive/unsignedint.rs
index f0a78f7..a51ca6f 100644
--- a/src/primitive/unsignedint.rs
+++ b/src/primitive/unsignedint.rs
@@ -6,9 +6,9 @@ use std::result::Result;
use std::vec::Vec;
use crate::error::ProtocolError;
-use crate::{deserialize::*, primitive, serialize::*};
+use crate::{primitive, serialize::*};
-use crate::serialize::SerializeVariant;
+use crate::serialize::VariantType;
impl Serialize for bool {
fn serialize(&self) -> Result<Vec<u8>, ProtocolError> {
@@ -31,7 +31,7 @@ impl Deserialize for bool {
}
}
-impl SerializeVariant for bool {
+impl VariantType for bool {
const TYPE: u32 = primitive::BOOL;
}
@@ -48,7 +48,7 @@ impl Deserialize for u64 {
}
}
-impl SerializeVariant for u64 {
+impl VariantType for u64 {
const TYPE: u32 = primitive::ULONG;
}
@@ -65,7 +65,7 @@ impl Deserialize for u32 {
}
}
-impl SerializeVariant for u32 {
+impl VariantType for u32 {
const TYPE: u32 = primitive::UINT;
}
@@ -82,7 +82,7 @@ impl Deserialize for u16 {
}
}
-impl SerializeVariant for u16 {
+impl VariantType for u16 {
const TYPE: u32 = primitive::USHORT;
}
@@ -98,6 +98,6 @@ impl Deserialize for u8 {
}
}
-impl SerializeVariant for u8 {
+impl VariantType for u8 {
const TYPE: u32 = primitive::UCHAR;
}
diff --git a/src/primitive/variant.rs b/src/primitive/variant.rs
index 3678ca7..32757d9 100644
--- a/src/primitive/variant.rs
+++ b/src/primitive/variant.rs
@@ -6,7 +6,7 @@ use log::{error, trace};
use crate::error::ProtocolError;
use crate::primitive::StringList;
use crate::primitive::{self, PeerPtr};
-use crate::{deserialize::*, serialize::*};
+use crate::serialize::*;
use crate::primitive::{BufferId, BufferInfo, Date, DateTime, Message, MsgId, Time, VariantList, VariantMap};
diff --git a/src/primitive/variantlist.rs b/src/primitive/variantlist.rs
index ac8cc07..0f0f4e0 100644
--- a/src/primitive/variantlist.rs
+++ b/src/primitive/variantlist.rs
@@ -3,11 +3,11 @@ use std::vec::Vec;
use log::trace;
use crate::error::ProtocolError;
-use crate::{deserialize::*, serialize::*};
+use crate::serialize::*;
use crate::primitive::Variant;
-use crate::serialize::SerializeVariant;
+use crate::serialize::VariantType;
/// VariantLists are represented as a Vec of Variants.
///
@@ -47,7 +47,7 @@ impl Deserialize for VariantList {
}
}
-impl SerializeVariant for VariantList {
+impl VariantType for VariantList {
const TYPE: u32 = crate::primitive::QVARIANTLIST;
}
diff --git a/src/primitive/variantmap.rs b/src/primitive/variantmap.rs
index 7a847c5..4953f25 100644
--- a/src/primitive/variantmap.rs
+++ b/src/primitive/variantmap.rs
@@ -4,12 +4,12 @@ use std::vec::Vec;
use log::trace;
use crate::error::ProtocolError;
-use crate::{deserialize::*, serialize::*};
+use crate::serialize::*;
use crate::primitive::Variant;
use crate::util;
-use crate::serialize::SerializeVariant;
+use crate::serialize::VariantType;
/// VariantMaps are represented as a HashMap with String as key and Variant as value
///
@@ -55,6 +55,6 @@ impl Deserialize for VariantMap {
}
}
-impl SerializeVariant for VariantMap {
+impl VariantType for VariantMap {
const TYPE: u32 = crate::primitive::QVARIANTMAP;
}
diff --git a/src/serialize.rs b/src/serialize.rs
index 52fc2fe..553a239 100644
--- a/src/serialize.rs
+++ b/src/serialize.rs
@@ -46,36 +46,24 @@ pub trait UserType {
/// const TYPE: u32 = primitive::QVARIANTLIST;
/// }
/// ```
-pub trait SerializeVariant {
+pub trait VariantType {
/// QT Type as defined by the [Primitive Constants]
///
/// [Primitive Constants]: primitive#constants
const TYPE: u32;
+}
+pub trait SerializeVariant: VariantType + Serialize {
/// Default implementation that passes the serialization through to [SerializeVariantInner].
/// [SerializeVariantInner] is automaticly implemented for all types that implement [Serialize]
///
/// ```rust ignore
/// self.serialize_variant_inner(Self::TYPE)
/// ```
- fn serialize_variant(&self) -> Result<Vec<u8>, ProtocolError>
- where
- Self: SerializeVariantInner,
- {
- self.serialize_variant_inner(Self::TYPE)
- }
-}
-
-/// Implemented automaticly for all types that implement [Serialize] refer to [SerializeVariant]
-pub trait SerializeVariantInner {
- fn serialize_variant_inner(&self, t: u32) -> Result<Vec<u8>, ProtocolError>;
-}
-
-impl<T: Serialize> SerializeVariantInner for T {
- fn serialize_variant_inner(&self, t: u32) -> Result<Vec<u8>, ProtocolError> {
+ fn serialize_variant(&self) -> Result<Vec<u8>, ProtocolError> {
let mut res: Vec<u8> = Vec::new();
- res.extend(t.to_be_bytes().iter());
+ res.extend(Self::TYPE.to_be_bytes().iter());
res.extend(0x00u8.to_be_bytes().iter());
res.extend(self.serialize()?);
@@ -83,6 +71,32 @@ impl<T: Serialize> SerializeVariantInner for T {
}
}
-impl<T: UserType> SerializeVariant for T {
+impl<T: VariantType + Serialize> SerializeVariant for T {}
+
+impl<T: UserType> VariantType for T {
const TYPE: u32 = primitive::USERTYPE;
}
+
+// =============================================
+// Deserialization
+//
+
+/// Deserialization of types and structs to the quassel byteprotocol
+pub trait Deserialize {
+ fn parse(b: &[u8]) -> Result<(usize, Self), ProtocolError>
+ where
+ Self: std::marker::Sized;
+}
+
+/// Deserialization of UTF-8 based Strings to the quassel byteprotocol
+pub trait DeserializeUTF8 {
+ fn parse_utf8(b: &[u8]) -> Result<(usize, Self), ProtocolError>
+ where
+ Self: std::marker::Sized;
+}
+
+pub trait DeserializeVariant: VariantType {
+ fn parse_variant(b: &[u8]) -> Result<(usize, Self), ProtocolError>
+ where
+ Self: std::marker::Sized;
+}