diff options
Diffstat (limited to 'src/codec/encode.rs')
| -rw-r--r-- | src/codec/encode.rs | 43 |
1 files changed, 17 insertions, 26 deletions
diff --git a/src/codec/encode.rs b/src/codec/encode.rs index 70d9d5c..bd76605 100644 --- a/src/codec/encode.rs +++ b/src/codec/encode.rs @@ -1,10 +1,10 @@ -use crate::{codec::error::Error, context::Context}; +use crate::codec::error::Error; use std::{io::Write, sync::Arc}; macro_rules! impl_encode { ($t: ty) => { - impl Encode for $t { - fn encode(&self, buffer: &mut dyn Write, _: &dyn Context) -> Result<usize, Error> { + impl<Ctx> Encode<Ctx> for $t { + fn encode(&self, buffer: &mut dyn Write, _: &mut Ctx) -> Result<usize, Error> { let size = buffer.write(&self.to_be_bytes())?; Ok(size) } @@ -12,19 +12,19 @@ macro_rules! impl_encode { }; } -pub trait Encode { - fn encode(&self, buffer: &mut dyn Write, ctx: &dyn Context) -> Result<usize, Error>; +pub trait Encode<Ctx> { + fn encode(&self, buffer: &mut dyn Write, ctx: &mut Ctx) -> Result<usize, Error>; } -impl Encode for bool { - fn encode(&self, buffer: &mut dyn Write, _: &dyn Context) -> Result<usize, Error> { +impl<Ctx> Encode<Ctx> for bool { + fn encode(&self, buffer: &mut dyn Write, _: &mut Ctx) -> Result<usize, Error> { let size = buffer.write(&[*self as u8])?; Ok(size) } } -impl<T: Encode> Encode for Option<T> { - fn encode(&self, buffer: &mut dyn Write, ctx: &dyn Context) -> Result<usize, Error> { +impl<Ctx, T: Encode<Ctx>> Encode<Ctx> for Option<T> { + fn encode(&self, buffer: &mut dyn Write, ctx: &mut Ctx) -> Result<usize, Error> { match self { Some(val) => { let mut size = 1u8.encode(buffer, ctx)?; @@ -36,8 +36,8 @@ impl<T: Encode> Encode for Option<T> { } } -impl<T: Encode> Encode for Vec<T> { - fn encode(&self, buffer: &mut dyn Write, ctx: &dyn Context) -> Result<usize, Error> { +impl<Ctx, T: Encode<Ctx>> Encode<Ctx> for Vec<T> { + fn encode(&self, buffer: &mut dyn Write, ctx: &mut Ctx) -> Result<usize, Error> { let mut size = self.len().encode(buffer, ctx)?; for item in self { size += item.encode(buffer, ctx)?; @@ -46,23 +46,23 @@ impl<T: Encode> Encode for Vec<T> { } } -impl Encode for String { - fn encode(&self, buffer: &mut dyn Write, _: &dyn Context) -> Result<usize, Error> { +impl<Ctx> Encode<Ctx> for String { + fn encode(&self, buffer: &mut dyn Write, _: &mut Ctx) -> Result<usize, Error> { let utf8 = self.as_bytes(); buffer.write_all(utf8)?; Ok(utf8.len()) } } -impl Encode for Arc<[u8]> { - fn encode(&self, buffer: &mut dyn Write, _: &dyn Context) -> Result<usize, Error> { +impl<Ctx> Encode<Ctx> for Arc<[u8]> { + fn encode(&self, buffer: &mut dyn Write, _: &mut Ctx) -> Result<usize, Error> { let len = buffer.write(self)?; Ok(len) } } -impl<const S: usize> Encode for [u8; S] { - fn encode(&self, buffer: &mut dyn Write, _ctx: &dyn Context) -> Result<usize, Error> { +impl<Ctx, const S: usize> Encode<Ctx> for [u8; S] { + fn encode(&self, buffer: &mut dyn Write, _ctx: &mut Ctx) -> Result<usize, Error> { let len = buffer.write(self)?; Ok(len) } @@ -84,12 +84,3 @@ impl_encode!(isize); impl_encode!(f32); impl_encode!(f64); - -impl<T> Encode for T -where - T: AsRef<dyn Encode>, -{ - fn encode(&self, buffer: &mut dyn Write, ctx: &dyn Context) -> Result<usize, Error> { - self.as_ref().encode(buffer, ctx) - } -} |
