pub struct Cursor<'a> { /* private fields */ }Expand description
Stateful, zero-copy cursor over an immutable byte slice.
All methods advance the cursor in-place and return sub-slices that borrow from the original input — no allocation, no memcpy.
Implementations§
Source§impl<'a> Cursor<'a>
impl<'a> Cursor<'a>
Sourcepub fn read_bytes(&mut self, n: usize) -> ParseResult<&'a [u8]>
pub fn read_bytes(&mut self, n: usize) -> ParseResult<&'a [u8]>
Borrow exactly n bytes and advance the cursor.
This is the core primitive — O(1), zero-copy.
Sourcepub fn read_u8(&mut self) -> ParseResult<u8>
pub fn read_u8(&mut self) -> ParseResult<u8>
Read a single byte.
Sourcepub fn read_u16_le(&mut self) -> ParseResult<u16>
pub fn read_u16_le(&mut self) -> ParseResult<u16>
Read a little-endian u16.
Sourcepub fn read_u32_le(&mut self) -> ParseResult<u32>
pub fn read_u32_le(&mut self) -> ParseResult<u32>
Read a little-endian u32.
Sourcepub fn read_i32_le(&mut self) -> ParseResult<i32>
pub fn read_i32_le(&mut self) -> ParseResult<i32>
Read a little-endian i32.
Sourcepub fn read_u64_le(&mut self) -> ParseResult<u64>
pub fn read_u64_le(&mut self) -> ParseResult<u64>
Read a little-endian u64.
Sourcepub fn read_i64_le(&mut self) -> ParseResult<i64>
pub fn read_i64_le(&mut self) -> ParseResult<i64>
Read a little-endian i64.
Sourcepub fn read_varint(&mut self) -> ParseResult<u64>
pub fn read_varint(&mut self) -> ParseResult<u64>
Parse a Bitcoin-style variable-length integer (1, 3, 5, or 9 bytes).
Returns the decoded value as u64.
Sourcepub fn read_var_bytes(&mut self, max: usize) -> ParseResult<&'a [u8]>
pub fn read_var_bytes(&mut self, max: usize) -> ParseResult<&'a [u8]>
Read a length-prefixed byte slice (varint + raw bytes).
Returns a zero-copy sub-slice of the original input.
Sourcepub fn read_array<const N: usize>(&mut self) -> ParseResult<&'a [u8; N]>
pub fn read_array<const N: usize>(&mut self) -> ParseResult<&'a [u8; N]>
Borrow a fixed-size array from the current position.
Panics at compile-time if N == 0.
Sourcepub fn skip(&mut self, n: usize) -> ParseResult<()>
pub fn skip(&mut self, n: usize) -> ParseResult<()>
Skip n bytes without returning them.
Sourcepub fn split(&mut self, n: usize) -> ParseResult<Cursor<'a>>
pub fn split(&mut self, n: usize) -> ParseResult<Cursor<'a>>
Create a sub-cursor for exactly n bytes and advance the outer cursor.
Useful for reading a known-size payload and ensuring it is fully consumed.