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