From 6001cdeff335e12583a398acbb5a8a42c01bc077 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Thu, 8 Dec 2022 09:13:17 +0100 Subject: fast mode --- evc/src/format/ser.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'evc/src/format') diff --git a/evc/src/format/ser.rs b/evc/src/format/ser.rs index 817cafe..995ca75 100644 --- a/evc/src/format/ser.rs +++ b/evc/src/format/ser.rs @@ -103,6 +103,28 @@ impl Ser for Vec { } } +pub trait ConstSizeSerExt: Sized { + fn write_const_size(&self, sink: &mut impl Write, size: usize) -> anyhow::Result<()>; + fn read_const_size(source: &mut impl Read, size: usize) -> anyhow::Result; +} +impl ConstSizeSerExt for Vec { + fn write_const_size(&self, sink: &mut impl Write, size: usize) -> anyhow::Result<()> { + assert_eq!(self.len(), size); + for e in self { + e.write(sink).context("some const-size vec")?; + } + Ok(()) + } + + fn read_const_size(source: &mut impl Read, size: usize) -> anyhow::Result { + let mut v = vec![]; + for _ in 0..size { + v.push(T::read(source)?) + } + Ok(v) + } +} + impl Ser for u8 { fn write(&self, sink: &mut impl Write) -> anyhow::Result<()> { Ok(sink.write_all(&[*self]).context("write u8")?) -- cgit v1.2.3-70-g09d2