diff --git a/crates/flat/src/decoder.rs b/crates/flat/src/decoder.rs index 7e9eedd2..95ca1362 100644 --- a/crates/flat/src/decoder.rs +++ b/crates/flat/src/decoder.rs @@ -1,21 +1,21 @@ use crate::decode::Decode; -pub struct Decoder { - buffer: Vec, +pub struct Decoder<'b> { + buffer: &'b [u8], used_bits: i64, pos: usize, } -impl Decoder { - pub fn new(bytes: &[u8]) -> Decoder { +impl<'b> Decoder<'b> { + pub fn new(bytes: &'b [u8]) -> Decoder { Decoder { - buffer: bytes.to_vec(), + buffer: bytes, pos: 0, used_bits: 0, } } - pub fn decode<'b, T: Decode<'b>>(&mut self) -> Result { + pub fn decode>(&mut self) -> Result { T::decode(self) } diff --git a/crates/flat/src/lib.rs b/crates/flat/src/lib.rs index d61d11d1..8a11995b 100644 --- a/crates/flat/src/lib.rs +++ b/crates/flat/src/lib.rs @@ -37,7 +37,7 @@ where Ok(e.buffer) } -pub fn decode<'b, T>(bytes: &[u8]) -> Result +pub fn decode<'b, T>(bytes: &'b [u8]) -> Result where T: de::Decode<'b>, {