pub struct ByteDeserializer<'a> { /* private fields */ }Expand description
A deserializer that reads data from a byte buffer in little-endian format.
This is a concrete implementation of the Deserializer trait that reads
binary data in a compact, little-endian format. This is the default deserializer
used by the crate::from_bytes convenience function.
§Format
This deserializer expects data in the same format as crate::ser::ByteSerializer:
- All integers in little-endian byte order
- Floating-point numbers in IEEE 754 representation
boolas a single byte (0 or 1)Option<T>: 1 byte tag (0=None, 1=Some) followed by T if Some- Arrays: Elements deserialized sequentially (no length prefix expected)
- Tuples: Elements deserialized sequentially
- Strings/Vec: u32 length prefix followed by data
§Examples
§Basic Usage
ⓘ
use osal_rs_serde::{ByteDeserializer, Deserializer};
let buffer = [42u8, 0, 0, 0, 1, 156, 255];
let mut deserializer = ByteDeserializer::new(&buffer);
let value1 = deserializer.deserialize_u32("").unwrap();
let value2 = deserializer.deserialize_bool("").unwrap();
let value3 = deserializer.deserialize_i16("").unwrap();
assert_eq!(value1, 42);
assert_eq!(value2, true);
assert_eq!(value3, -100);§With Structs
ⓘ
use osal_rs_serde::{ByteDeserializer, Deserialize, from_bytes};
#[derive(Deserialize)]
struct Message {
id: u32,
value: i16,
}
let buffer = [100, 0, 0, 0, 206, 255]; // id=100, value=-50 in little-endian
let msg: Message = from_bytes(&buffer).unwrap();
assert_eq!(msg.id, 100);
assert_eq!(msg.value, -50);§Error Handling
Returns Error::UnexpectedEof if the buffer
doesn’t contain enough data for the requested type.
§Memory Layout
The deserializer reads data sequentially without expecting padding or alignment:
struct Data { a: u16, b: u32 }
Memory: [a_lo, a_hi, b0, b1, b2, b3]Implementations§
Trait Implementations§
Source§impl<'a> Deserializer for ByteDeserializer<'a>
impl<'a> Deserializer for ByteDeserializer<'a>
Source§fn deserialize_bytes(&mut self, _name: &str, buffer: &mut [u8]) -> Result<usize>
fn deserialize_bytes(&mut self, _name: &str, buffer: &mut [u8]) -> Result<usize>
Deserialize bytes into a buffer. Returns the number of bytes read.
Source§fn deserialize_vec<T>(&mut self, _name: &str) -> Result<Vec<T>>where
T: Deserialize,
fn deserialize_vec<T>(&mut self, _name: &str) -> Result<Vec<T>>where
T: Deserialize,
Deserialize a vector of deserializable items.
Source§fn deserialize_array<T, const N: usize>(
&mut self,
_name: &str,
) -> Result<[T; N]>where
T: Deserialize,
fn deserialize_array<T, const N: usize>(
&mut self,
_name: &str,
) -> Result<[T; N]>where
T: Deserialize,
Deserialize an array of deserializable items.
Source§fn deserialize_struct_start(&mut self, _name: &str) -> Result<(), Self::Error>
fn deserialize_struct_start(&mut self, _name: &str) -> Result<(), Self::Error>
Begin deserializing a struct with the given name.
Source§fn deserialize_field<T>(&mut self, name: &str) -> Result<T, Self::Error>where
T: Deserialize,
fn deserialize_field<T>(&mut self, name: &str) -> Result<T, Self::Error>where
T: Deserialize,
Deserialize a struct field with name.
Auto Trait Implementations§
impl<'a> Freeze for ByteDeserializer<'a>
impl<'a> RefUnwindSafe for ByteDeserializer<'a>
impl<'a> Send for ByteDeserializer<'a>
impl<'a> Sync for ByteDeserializer<'a>
impl<'a> Unpin for ByteDeserializer<'a>
impl<'a> UnsafeUnpin for ByteDeserializer<'a>
impl<'a> UnwindSafe for ByteDeserializer<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more