pub trait Deserialize {
type Output: Sized;
// Required method
fn deserialize(
buffer: &mut impl Buf,
) -> Result<Self::Output, DeserializeError>;
// Provided method
fn deserialize_len(
length: LengthField,
buffer: &mut impl Buf,
) -> Result<Self::Output, DeserializeError> { ... }
}Expand description
Deserialize data from a SOME/IP byte stream.
This trait provides methods for deserializing data structures from a byte stream (Buf)
encoded in the SOME/IP on-wire format.
deserialize is used to deserialize statically sized types, while deserialize_len is
used to deserialize dynamically sized types from the stream.
Required Associated Types§
Required Methods§
Sourcefn deserialize(buffer: &mut impl Buf) -> Result<Self::Output, DeserializeError>
fn deserialize(buffer: &mut impl Buf) -> Result<Self::Output, DeserializeError>
Deserializes an instance of Deserialize::Output from the buffer.
§Errors
This function will return an error if the deserialization process fails for any reason, such as encountering unexpected data or running out of data in the buffer.
§Examples
use rsomeip_bytes::{Bytes, Deserialize, DeserializeError};
let mut buffer = Bytes::copy_from_slice(&[1u8, 2u8]);
assert_eq!(u8::deserialize(&mut buffer), Ok(1u8));
assert_eq!(u8::deserialize(&mut buffer), Ok(2u8));
assert_eq!(u8::deserialize(&mut buffer), Err(DeserializeError::InsufficientData { expected: 1, available: 0 }));Provided Methods§
Sourcefn deserialize_len(
length: LengthField,
buffer: &mut impl Buf,
) -> Result<Self::Output, DeserializeError>
fn deserialize_len( length: LengthField, buffer: &mut impl Buf, ) -> Result<Self::Output, DeserializeError>
Deserializes an instance of Deserialize::Output from the buffer.
This method specifies a length field which is used to indicate the size of the data to be
deserialized. This is necessary in case of dynamically sized data structures, like Vec
or String.
§Errors
This function will return an error if the deserialization process fails for any reason, such as encountering unexpected data, running out of data in the buffer, or exceeding the specified length.
§Examples
use rsomeip_bytes::{Bytes, Deserialize, DeserializeError, LengthField};
let mut buffer = Bytes::copy_from_slice(&[2u8, 1u8, 2u8, 3u8]);
let vec: Vec<u8> = Vec::deserialize_len(LengthField::U8, &mut buffer).unwrap();
assert_eq!(&vec[..], &[1u8, 2u8][..]);
assert_eq!(u8::deserialize(&mut buffer), Ok(3u8));
assert_eq!(u8::deserialize(&mut buffer), Err(DeserializeError::InsufficientData { expected: 1, available: 0 }));Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.