pub struct Reader<'a> { /* private fields */ }Expand description
A binary reader for parsing Bitcoin data structures.
Reader provides methods for reading integers in little-endian format
and Bitcoin-specific variable-length integers (varints).
§Example
use bsv_rs::primitives::encoding::Reader;
let data = vec![0x01, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00];
let mut reader = Reader::new(&data);
assert_eq!(reader.read_u8().unwrap(), 0x01);
assert_eq!(reader.read_u16_le().unwrap(), 0x0002);
assert_eq!(reader.read_u32_le().unwrap(), 0x00000003);
assert!(reader.is_empty());Implementations§
Source§impl<'a> Reader<'a>
impl<'a> Reader<'a>
Sourcepub fn consumed_since(&self, from_pos: usize) -> &'a [u8] ⓘ
pub fn consumed_since(&self, from_pos: usize) -> &'a [u8] ⓘ
Returns a slice of the underlying data from from_pos to the current position.
Useful for capturing raw bytes consumed by a series of read operations.
Sourcepub fn read_u16_le(&mut self) -> Result<u16>
pub fn read_u16_le(&mut self) -> Result<u16>
Reads a 16-bit unsigned integer in little-endian format.
Sourcepub fn read_u32_le(&mut self) -> Result<u32>
pub fn read_u32_le(&mut self) -> Result<u32>
Reads a 32-bit unsigned integer in little-endian format.
Sourcepub fn read_u64_le(&mut self) -> Result<u64>
pub fn read_u64_le(&mut self) -> Result<u64>
Reads a 64-bit unsigned integer in little-endian format.
Sourcepub fn read_i16_le(&mut self) -> Result<i16>
pub fn read_i16_le(&mut self) -> Result<i16>
Reads a 16-bit signed integer in little-endian format.
Sourcepub fn read_i32_le(&mut self) -> Result<i32>
pub fn read_i32_le(&mut self) -> Result<i32>
Reads a 32-bit signed integer in little-endian format.
Sourcepub fn read_i64_le(&mut self) -> Result<i64>
pub fn read_i64_le(&mut self) -> Result<i64>
Reads a 64-bit signed integer in little-endian format.
Sourcepub fn read_var_int(&mut self) -> Result<u64>
pub fn read_var_int(&mut self) -> Result<u64>
Reads a Bitcoin variable-length integer.
Bitcoin varints are encoded as follows:
0x00-0xFC: 1 byte, value as-is0xFD: 3 bytes total,0xFDprefix + 2 bytes little-endian uint160xFE: 5 bytes total,0xFEprefix + 4 bytes little-endian uint320xFF: 9 bytes total,0xFFprefix + 8 bytes little-endian uint64
§Returns
The decoded value as a u64
§Example
use bsv_rs::primitives::encoding::Reader;
// Single byte: 0xFC (252)
let mut reader = Reader::new(&[0xFC]);
assert_eq!(reader.read_var_int().unwrap(), 0xFC);
// 3-byte: 0xFD 0xFD 0x00 (253)
let mut reader = Reader::new(&[0xFD, 0xFD, 0x00]);
assert_eq!(reader.read_var_int().unwrap(), 0xFD);Sourcepub fn read_var_int_num(&mut self) -> Result<usize>
pub fn read_var_int_num(&mut self) -> Result<usize>
Reads a Bitcoin varint as a usize, for use as a length.
This is a convenience method that converts the u64 result to usize. It will return an error if the value exceeds usize::MAX on 32-bit platforms.
Sourcepub fn read_bytes(&mut self, len: usize) -> Result<&'a [u8]>
pub fn read_bytes(&mut self, len: usize) -> Result<&'a [u8]>
Sourcepub fn read_var_bytes(&mut self) -> Result<&'a [u8]>
pub fn read_var_bytes(&mut self) -> Result<&'a [u8]>
Reads a variable-length byte sequence (varint length prefix followed by bytes).
This is commonly used in Bitcoin for scripts and other length-prefixed data.
§Returns
A slice of the bytes
Sourcepub fn read_remaining(&mut self) -> &'a [u8] ⓘ
pub fn read_remaining(&mut self) -> &'a [u8] ⓘ
Reads all remaining bytes.
§Returns
A slice containing all bytes from the current position to the end