diff options
Diffstat (limited to 'src/codec')
| -rw-r--r-- | src/codec/decode.rs | 41 | ||||
| -rw-r--r-- | src/codec/encode.rs | 33 |
2 files changed, 38 insertions, 36 deletions
diff --git a/src/codec/decode.rs b/src/codec/decode.rs index fa4ae95..39253a2 100644 --- a/src/codec/decode.rs +++ b/src/codec/decode.rs @@ -1,13 +1,14 @@ //! Decoding: reading protocol values from a byte stream. +use crate::context::Context; use std::{io::Read, sync::Arc}; use crate::{DEFAULT_BUFFER_LEN, codec::error::Result}; macro_rules! impl_decode { ($type: ty) => { - impl<Ctx> Decode<Ctx> for $type { + impl<Data> Decode<Data> for $type { // decode number using big endian - fn decode(reader: &mut dyn Read, _: &mut Ctx) -> Result<Self> + fn decode(reader: &mut dyn Read, _: &Context<Data>) -> Result<Self> where Self: Sized, { @@ -21,14 +22,14 @@ macro_rules! impl_decode { } /// Read a value from a byte stream -pub trait Decode<Ctx> { - fn decode(reader: &mut dyn Read, ctx: &mut Ctx) -> Result<Self> +pub trait Decode<Data> { + fn decode(reader: &mut dyn Read, ctx: &Context<Data>) -> Result<Self> where Self: Sized; } -impl<Ctx> Decode<Ctx> for bool { - fn decode(reader: &mut dyn Read, _: &mut Ctx) -> Result<Self> +impl<Data> Decode<Data> for bool { + fn decode(reader: &mut dyn Read, _: &Context<Data>) -> Result<Self> where Self: Sized, { @@ -38,8 +39,8 @@ impl<Ctx> Decode<Ctx> for bool { } } -impl<Ctx, T: Decode<Ctx>> Decode<Ctx> for Option<T> { - fn decode(reader: &mut dyn Read, ctx: &mut Ctx) -> Result<Self> +impl<Data, T: Decode<Data>> Decode<Data> for Option<T> { + fn decode(reader: &mut dyn Read, ctx: &Context<Data>) -> Result<Self> where Self: Sized, { @@ -52,8 +53,8 @@ impl<Ctx, T: Decode<Ctx>> Decode<Ctx> for Option<T> { } } -impl<Ctx, T: Decode<Ctx>> Decode<Ctx> for Vec<T> { - fn decode(reader: &mut dyn Read, ctx: &mut Ctx) -> Result<Self> +impl<Data, T: Decode<Data>> Decode<Data> for Vec<T> { + fn decode(reader: &mut dyn Read, ctx: &Context<Data>) -> Result<Self> where Self: Sized, { @@ -66,8 +67,8 @@ impl<Ctx, T: Decode<Ctx>> Decode<Ctx> for Vec<T> { } } -impl<Ctx> Decode<Ctx> for String { - fn decode(reader: &mut dyn Read, _: &mut Ctx) -> Result<Self> +impl<Data> Decode<Data> for String { + fn decode(reader: &mut dyn Read, _: &Context<Data>) -> Result<Self> where Self: Sized, { @@ -77,16 +78,16 @@ impl<Ctx> Decode<Ctx> for String { } } -impl<Ctx> Decode<Ctx> for Arc<[u8]> { - fn decode(reader: &mut dyn Read, _: &mut Ctx) -> Result<Self> { +impl<Data> Decode<Data> for Arc<[u8]> { + fn decode(reader: &mut dyn Read, _: &Context<Data>) -> Result<Self> { let mut buf = Vec::with_capacity(DEFAULT_BUFFER_LEN); reader.read_to_end(&mut buf)?; Ok(Arc::<[u8]>::from(buf.into_boxed_slice())) } } -impl<Ctx, const S: usize> Decode<Ctx> for [u8; S] { - fn decode(reader: &mut dyn Read, _: &mut Ctx) -> Result<Self> +impl<Data, const S: usize> Decode<Data> for [u8; S] { + fn decode(reader: &mut dyn Read, _: &Context<Data>) -> Result<Self> where Self: Sized, { @@ -110,8 +111,8 @@ impl_decode!(i64); impl_decode!(i128); impl_decode!(isize); -impl<Ctx> Decode<Ctx> for f64 { - fn decode(reader: &mut dyn Read, ctx: &mut Ctx) -> Result<Self> +impl<Data> Decode<Data> for f64 { + fn decode(reader: &mut dyn Read, ctx: &Context<Data>) -> Result<Self> where Self: Sized, { @@ -121,8 +122,8 @@ impl<Ctx> Decode<Ctx> for f64 { } } -impl<Ctx> Decode<Ctx> for f32 { - fn decode(reader: &mut dyn Read, ctx: &mut Ctx) -> Result<Self> +impl<Data> Decode<Data> for f32 { + fn decode(reader: &mut dyn Read, ctx: &Context<Data>) -> Result<Self> where Self: Sized, { diff --git a/src/codec/encode.rs b/src/codec/encode.rs index c8d1c7b..b9ac961 100644 --- a/src/codec/encode.rs +++ b/src/codec/encode.rs @@ -1,12 +1,13 @@ //! Encoding: writing protocol values into a byte stream. use crate::codec::error::Error; +use crate::context::Context; use std::{io::Write, sync::Arc}; macro_rules! impl_encode { ($t: ty) => { - impl<Ctx> Encode<Ctx> for $t { + impl<Data> Encode<Data> for $t { /// write number using big endian - fn encode(&self, buffer: &mut dyn Write, _: &mut Ctx) -> Result<usize, Error> { + fn encode(&self, buffer: &mut dyn Write, _: &Context<Data>) -> Result<usize, Error> { let size = buffer.write(&self.to_be_bytes())?; Ok(size) } @@ -15,20 +16,20 @@ macro_rules! impl_encode { } /// Write a value into a byte stream -pub trait Encode<Ctx> { - fn encode(&self, buffer: &mut dyn Write, ctx: &mut Ctx) -> Result<usize, Error>; +pub trait Encode<Data> { + fn encode(&self, buffer: &mut dyn Write, ctx: &Context<Data>) -> Result<usize, Error>; } -impl<Ctx> Encode<Ctx> for bool { - fn encode(&self, buffer: &mut dyn Write, _: &mut Ctx) -> Result<usize, Error> { +impl<Data> Encode<Data> for bool { + fn encode(&self, buffer: &mut dyn Write, _: &Context<Data>) -> Result<usize, Error> { let size = buffer.write(&[*self as u8])?; Ok(size) } } -impl<Ctx, T: Encode<Ctx>> Encode<Ctx> for Option<T> { +impl<Data, T: Encode<Data>> Encode<Data> for Option<T> { /// Encode `T` if Some(T) or do nothing if None - fn encode(&self, buffer: &mut dyn Write, ctx: &mut Ctx) -> Result<usize, Error> { + fn encode(&self, buffer: &mut dyn Write, ctx: &Context<Data>) -> Result<usize, Error> { match self { Some(val) => { let size = val.encode(buffer, ctx)?; @@ -39,11 +40,11 @@ impl<Ctx, T: Encode<Ctx>> Encode<Ctx> for Option<T> { } } -impl<Ctx, T: Encode<Ctx>> Encode<Ctx> for Vec<T> { +impl<Data, T: Encode<Data>> Encode<Data> for Vec<T> { /// Encode each element of vector /// use `CountPrefix` to prefix the vector with number of elements /// use `LenPrefix` to prefix the vector with encoded byte size - fn encode(&self, buffer: &mut dyn Write, ctx: &mut Ctx) -> Result<usize, Error> { + fn encode(&self, buffer: &mut dyn Write, ctx: &Context<Data>) -> Result<usize, Error> { let mut size = 0; for item in self { size += item.encode(buffer, ctx)?; @@ -52,30 +53,30 @@ impl<Ctx, T: Encode<Ctx>> Encode<Ctx> for Vec<T> { } } -impl<Ctx> Encode<Ctx> for String { +impl<Data> Encode<Data> for String { /// Encode the string using utf8 /// use `CountPrefix` to prefix the string with char length /// use `LenPrefix` to prefix the string with utf8 bytes length - fn encode(&self, buffer: &mut dyn Write, _: &mut Ctx) -> Result<usize, Error> { + fn encode(&self, buffer: &mut dyn Write, _: &Context<Data>) -> Result<usize, Error> { let utf8 = self.as_bytes(); buffer.write_all(utf8)?; Ok(utf8.len()) } } -impl<Ctx> Encode<Ctx> for Arc<[u8]> { +impl<Data> Encode<Data> for Arc<[u8]> { /// write raw slice into the buffer /// use `LenPrefix` to prefix with byte length - fn encode(&self, buffer: &mut dyn Write, _: &mut Ctx) -> Result<usize, Error> { + fn encode(&self, buffer: &mut dyn Write, _: &Context<Data>) -> Result<usize, Error> { let len = buffer.write(self)?; Ok(len) } } -impl<Ctx, const S: usize> Encode<Ctx> for [u8; S] { +impl<Data, const S: usize> Encode<Data> for [u8; S] { /// write raw slice into the buffer /// use `LenPrefix` to prefix with byte length - fn encode(&self, buffer: &mut dyn Write, _ctx: &mut Ctx) -> Result<usize, Error> { + fn encode(&self, buffer: &mut dyn Write, _: &Context<Data>) -> Result<usize, Error> { let len = buffer.write(self)?; Ok(len) } |
