diff options
| author | zirkonya <zirkonya@iridium.lan> | 2026-07-26 22:22:32 +0200 |
|---|---|---|
| committer | zirkonya <zirkonya@iridium.lan> | 2026-07-26 22:22:32 +0200 |
| commit | da20363883b00aaf56b6ba068465d3e9bdf9fedf (patch) | |
| tree | 792c6d0692392baf5ac380bafd7ea4a66b3346b6 /src/codec/encode.rs | |
| parent | 08c8e9d37f3e0f9a82c3792c1927967631de73cd (diff) | |
Add some prefixe
Diffstat (limited to 'src/codec/encode.rs')
| -rw-r--r-- | src/codec/encode.rs | 55 |
1 files changed, 52 insertions, 3 deletions
diff --git a/src/codec/encode.rs b/src/codec/encode.rs index f23913b..a40f551 100644 --- a/src/codec/encode.rs +++ b/src/codec/encode.rs @@ -1,6 +1,55 @@ -use std::io::{self, Write}; +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) -> Result<usize, Error> { + let size = buffer.write(&self.to_be_bytes())?; + Ok(size) + } + } + }; +} pub trait Encode { - fn encode(&self, write: &mut dyn Write) -> io::Result<usize>; - fn encoded_size(&self) -> Option<usize>; + fn encode(self, buffer: &mut dyn Write) -> Result<usize, Error>; +} + +impl Encode for bool { + fn encode(self, buffer: &mut dyn Write) -> Result<usize, Error> { + let size = buffer.write(&[self as u8])?; + Ok(size) + } +} + +impl Encode for Arc<[u8]> { + fn encode(self, buffer: &mut dyn Write) -> 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) -> Result<usize, Error> { + let len = buffer.write(&self)?; + Ok(len) + } +} + +impl_encode!(u8); +impl_encode!(u16); +impl_encode!(u32); +impl_encode!(u64); +impl_encode!(u128); +impl_encode!(usize); + +impl_encode!(i8); +impl_encode!(i16); +impl_encode!(i32); +impl_encode!(i64); +impl_encode!(i128); +impl_encode!(isize); + +impl_encode!(f32); +impl_encode!(f64); |
