From c546e2ef6c69bb1c6a86093f3cc7b2dab20d6ac4 Mon Sep 17 00:00:00 2001 From: Max Audron Date: Sat, 25 Apr 2020 19:35:29 +0200 Subject: finish parsing of primitive types --- src/protocol/message/handshake/types.rs | 49 ++++++++------------------------- 1 file changed, 11 insertions(+), 38 deletions(-) (limited to 'src/protocol/message/handshake') diff --git a/src/protocol/message/handshake/types.rs b/src/protocol/message/handshake/types.rs index 0c70914..99864b9 100644 --- a/src/protocol/message/handshake/types.rs +++ b/src/protocol/message/handshake/types.rs @@ -1,28 +1,24 @@ -use std::io::Read; -use std::vec::Vec; -use std::result::Result; -use std::convert::TryInto; use std::collections::HashMap; +use std::convert::TryInto; +use std::result::Result; +use std::vec::Vec; use failure::Error; -use crate::util; -use crate::protocol::primitive::{String, Variant}; -use crate::protocol::primitive::serialize::Serialize; -use crate::protocol::primitive::deserialize::Deserialize; -use crate::protocol::primitive::qread::QRead; use crate::protocol::error::ProtocolError; +use crate::protocol::primitive::deserialize::Deserialize; +use crate::protocol::primitive::serialize::Serialize; +use crate::protocol::primitive::{String, Variant}; +use crate::util; pub trait HandshakeSerialize { fn serialize(&self) -> Result, Error>; } pub trait HandshakeDeserialize { - fn parse(b: &[u8]) -> Result<(usize, Self), Error> where Self: std::marker::Sized ; -} - -pub trait HandshakeQRead { - fn read(stream: &mut T, buf: &mut [u8]) -> Result; + fn parse(b: &[u8]) -> Result<(usize, Self), Error> + where + Self: std::marker::Sized; } pub type VariantMap = HashMap; @@ -61,33 +57,10 @@ impl HandshakeDeserialize for VariantMap { match name { Variant::String(x) => map.insert(x, value), Variant::StringUTF8(x) => map.insert(x, value), - _ => bail!(ProtocolError::WrongVariant) + _ => bail!(ProtocolError::WrongVariant), }; } return Ok((pos, map)); } } - -impl HandshakeQRead for VariantMap { - fn read(s: &mut T, b: &mut [u8]) -> Result { - s.read(&mut b[0..4])?; - let (_, len) = i32::parse(&b[0..4])?; - - let mut pos = 4; - for _ in 0..(len / 2) { - pos += Variant::read(s, &mut b[pos..])?; - pos += Variant::read(s, &mut b[pos..])?; - } - -// let mut pos = 8; -// let len: usize = len as usize; -// loop { -// if pos >= len { break; } -// pos += Variant::read(s, &mut b[pos..])?; -// pos += Variant::read(s, &mut b[pos..])?; -// } - - return Ok(pos); - } -} -- cgit v1.2.3