Skip to content

Commit 28f57d1

Browse files
authored
Simplify BufferReader by not bookkeeping read offset separately (#3625)
The offset was already maintained in the slice itself (which is a pair of pointer and length).
1 parent 2d8c316 commit 28f57d1

File tree

1 file changed

+8
-9
lines changed

1 file changed

+8
-9
lines changed

crates/conversions/src/serde/deserialize.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,25 +17,24 @@ pub type BufferReadResult<T> = Result<T, BufferReadError>;
1717

1818
pub struct BufferReader<'a> {
1919
buffer: &'a [Felt],
20-
idx: usize,
2120
}
2221

2322
pub trait CairoDeserialize: Sized {
2423
fn deserialize(reader: &mut BufferReader<'_>) -> BufferReadResult<Self>;
2524
}
2625

27-
impl BufferReader<'_> {
26+
impl<'a> BufferReader<'a> {
2827
#[must_use]
29-
pub fn new<'a>(buffer: &'a [Felt]) -> BufferReader<'a> {
30-
BufferReader::<'a> { buffer, idx: 0 }
28+
pub fn new(buffer: &'a [Felt]) -> Self {
29+
Self { buffer }
3130
}
3231

3332
pub fn read_felt(&mut self) -> BufferReadResult<Felt> {
34-
let felt = self.buffer.get(self.idx).copied();
35-
36-
self.idx += 1;
37-
38-
felt.ok_or(BufferReadError::EndOfBuffer)
33+
let [head, tail @ ..] = self.buffer else {
34+
return Err(BufferReadError::EndOfBuffer);
35+
};
36+
self.buffer = tail;
37+
Ok(*head)
3938
}
4039

4140
pub fn read<T>(&mut self) -> BufferReadResult<T>

0 commit comments

Comments
 (0)