Deserialize

Trait Deserialize 

Source
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§

Source

type Output: Sized

Type of the data that will be deserialized.

Required Methods§

Source

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§

Source

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.

Implementations on Foreign Types§

Source§

impl Deserialize for bool

Source§

impl Deserialize for f32

Source§

type Output = f32

Source§

fn deserialize(buffer: &mut impl Buf) -> Result<Self::Output, DeserializeError>

Source§

impl Deserialize for f64

Source§

type Output = f64

Source§

fn deserialize(buffer: &mut impl Buf) -> Result<Self::Output, DeserializeError>

Source§

impl Deserialize for i8

Source§

type Output = i8

Source§

fn deserialize(buffer: &mut impl Buf) -> Result<Self::Output, DeserializeError>

Source§

impl Deserialize for i16

Source§

type Output = i16

Source§

fn deserialize(buffer: &mut impl Buf) -> Result<Self::Output, DeserializeError>

Source§

impl Deserialize for i32

Source§

type Output = i32

Source§

fn deserialize(buffer: &mut impl Buf) -> Result<Self::Output, DeserializeError>

Source§

impl Deserialize for i64

Source§

type Output = i64

Source§

fn deserialize(buffer: &mut impl Buf) -> Result<Self::Output, DeserializeError>

Source§

impl Deserialize for u8

Source§

type Output = u8

Source§

fn deserialize(buffer: &mut impl Buf) -> Result<Self::Output, DeserializeError>

Source§

impl Deserialize for u16

Source§

type Output = u16

Source§

fn deserialize(buffer: &mut impl Buf) -> Result<Self::Output, DeserializeError>

Source§

impl Deserialize for u32

Source§

type Output = u32

Source§

fn deserialize(buffer: &mut impl Buf) -> Result<Self::Output, DeserializeError>

Source§

impl Deserialize for u64

Source§

type Output = u64

Source§

fn deserialize(buffer: &mut impl Buf) -> Result<Self::Output, DeserializeError>

Source§

impl Deserialize for String

Source§

impl<A: Deserialize<Output = A>> Deserialize for (A,)

Source§

impl<A: Deserialize<Output = A>, B: Deserialize<Output = B>> Deserialize for (A, B)

Source§

impl<A: Deserialize<Output = A>, B: Deserialize<Output = B>, C: Deserialize<Output = C>> Deserialize for (A, B, C)

Source§

impl<A: Deserialize<Output = A>, B: Deserialize<Output = B>, C: Deserialize<Output = C>, D: Deserialize<Output = D>> Deserialize for (A, B, C, D)

Source§

impl<A: Deserialize<Output = A>, B: Deserialize<Output = B>, C: Deserialize<Output = C>, D: Deserialize<Output = D>, E: Deserialize<Output = E>> Deserialize for (A, B, C, D, E)

Source§

impl<A: Deserialize<Output = A>, B: Deserialize<Output = B>, C: Deserialize<Output = C>, D: Deserialize<Output = D>, E: Deserialize<Output = E>, F: Deserialize<Output = F>> Deserialize for (A, B, C, D, E, F)

Source§

impl<A: Deserialize<Output = A>, B: Deserialize<Output = B>, C: Deserialize<Output = C>, D: Deserialize<Output = D>, E: Deserialize<Output = E>, F: Deserialize<Output = F>, G: Deserialize<Output = G>> Deserialize for (A, B, C, D, E, F, G)

Source§

impl<A: Deserialize<Output = A>, B: Deserialize<Output = B>, C: Deserialize<Output = C>, D: Deserialize<Output = D>, E: Deserialize<Output = E>, F: Deserialize<Output = F>, G: Deserialize<Output = G>, H: Deserialize<Output = H>> Deserialize for (A, B, C, D, E, F, G, H)

Source§

impl<A: Deserialize<Output = A>, B: Deserialize<Output = B>, C: Deserialize<Output = C>, D: Deserialize<Output = D>, E: Deserialize<Output = E>, F: Deserialize<Output = F>, G: Deserialize<Output = G>, H: Deserialize<Output = H>, I: Deserialize<Output = I>> Deserialize for (A, B, C, D, E, F, G, H, I)

Source§

impl<A: Deserialize<Output = A>, B: Deserialize<Output = B>, C: Deserialize<Output = C>, D: Deserialize<Output = D>, E: Deserialize<Output = E>, F: Deserialize<Output = F>, G: Deserialize<Output = G>, H: Deserialize<Output = H>, I: Deserialize<Output = I>, J: Deserialize<Output = J>> Deserialize for (A, B, C, D, E, F, G, H, I, J)

Source§

impl<A: Deserialize<Output = A>, B: Deserialize<Output = B>, C: Deserialize<Output = C>, D: Deserialize<Output = D>, E: Deserialize<Output = E>, F: Deserialize<Output = F>, G: Deserialize<Output = G>, H: Deserialize<Output = H>, I: Deserialize<Output = I>, J: Deserialize<Output = J>, K: Deserialize<Output = K>> Deserialize for (A, B, C, D, E, F, G, H, I, J, K)

Source§

impl<A: Deserialize<Output = A>, B: Deserialize<Output = B>, C: Deserialize<Output = C>, D: Deserialize<Output = D>, E: Deserialize<Output = E>, F: Deserialize<Output = F>, G: Deserialize<Output = G>, H: Deserialize<Output = H>, I: Deserialize<Output = I>, J: Deserialize<Output = J>, K: Deserialize<Output = K>, L: Deserialize<Output = L>> Deserialize for (A, B, C, D, E, F, G, H, I, J, K, L)

Source§

impl<T> Deserialize for Vec<T>
where T: Deserialize<Output = T>,

Source§

type Output = Vec<T>

Source§

fn deserialize(buffer: &mut impl Buf) -> Result<Self::Output, DeserializeError>

Source§

impl<T, const N: usize> Deserialize for [T; N]
where T: Deserialize<Output = T> + Default,

Implementors§