summaryrefslogtreecommitdiff
path: root/src/codec/encode.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/codec/encode.rs')
-rw-r--r--src/codec/encode.rs43
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)
- }
-}