Skip to main content

Deserialize

Trait Deserialize 

Source
pub trait Deserialize {
    type Output: Sized;

    // Required methods
    fn deserialize<Buffer>(
        buffer: &mut Buffer,
    ) -> Result<Self::Output, DeserializeError>
       where Buffer: Buf + ?Sized;
    fn size_hint() -> Option<usize>;
}
Expand description

Deserialize data from a SOME/IP byte stream.

Required Associated Types§

Source

type Output: Sized

Type of the deserialized data.

Required Methods§

Source

fn deserialize<Buffer>( buffer: &mut Buffer, ) -> Result<Self::Output, DeserializeError>
where Buffer: Buf + ?Sized,

Deserializes an instance of Deserialize::Output from the buffer.

§Errors

Returns a DeserializeError if the deserialization fails.

§Examples
use rsomeip_bytes::{Deserialize as _};

// The buffer can be any type that implements `Buf`.
let buffer = [0x12_u8, 0x34];

// Deserialize a type from the buffer.
let value = u16::deserialize(&mut buffer.as_slice())?;
assert_eq!(value, 0x1234);
§Implementation notes

Care should be taken so that the serialized data matches the interface definition and that it’s compatible with the SOME/IP on-wire format to prevent issues during deserialization.

Source

fn size_hint() -> Option<usize>

Returns the minimum size of a correctly serialized Self::Output.

Deserialization is guaranteed to fail if the buffer doesn’t contain at least this amount of bytes.

Having more than this amount of bytes in the buffer doesn’t guarantee that deserialization does succeed however, as the correct size of some types can only be known at runtime, but it’s guaranteed to be at least this value.

Returns None if the size is larger than usize::MAX.

§Examples
use rsomeip_bytes::{Deserialize as _};

// Basic types match the in-memory size.
assert_eq!(u8::size_hint(), Some(1));
assert_eq!(u16::size_hint(), Some(2));
assert_eq!(u32::size_hint(), Some(4));
§Implementation notes

The value returned by this method should include the size of all statically known elements of Self::Output.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl Deserialize for bool

Source§

type Output = bool

Source§

fn deserialize<Buffer>( buffer: &mut Buffer, ) -> Result<Self::Output, DeserializeError>
where Buffer: Buf + ?Sized,

Source§

fn size_hint() -> Option<usize>

Source§

impl Deserialize for f32

Source§

fn size_hint() -> Option<usize>

Returns the size of self when serialized.

Never returns None.

Source§

type Output = f32

Source§

fn deserialize<Buffer>( buffer: &mut Buffer, ) -> Result<Self::Output, DeserializeError>
where Buffer: Buf + ?Sized,

Source§

impl Deserialize for f64

Source§

fn size_hint() -> Option<usize>

Returns the size of self when serialized.

Never returns None.

Source§

type Output = f64

Source§

fn deserialize<Buffer>( buffer: &mut Buffer, ) -> Result<Self::Output, DeserializeError>
where Buffer: Buf + ?Sized,

Source§

impl Deserialize for i8

Source§

fn size_hint() -> Option<usize>

Returns the size of self when serialized.

Never returns None.

Source§

type Output = i8

Source§

fn deserialize<Buffer>( buffer: &mut Buffer, ) -> Result<Self::Output, DeserializeError>
where Buffer: Buf + ?Sized,

Source§

impl Deserialize for i16

Source§

fn size_hint() -> Option<usize>

Returns the size of self when serialized.

Never returns None.

Source§

type Output = i16

Source§

fn deserialize<Buffer>( buffer: &mut Buffer, ) -> Result<Self::Output, DeserializeError>
where Buffer: Buf + ?Sized,

Source§

impl Deserialize for i32

Source§

fn size_hint() -> Option<usize>

Returns the size of self when serialized.

Never returns None.

Source§

type Output = i32

Source§

fn deserialize<Buffer>( buffer: &mut Buffer, ) -> Result<Self::Output, DeserializeError>
where Buffer: Buf + ?Sized,

Source§

impl Deserialize for i64

Source§

fn size_hint() -> Option<usize>

Returns the size of self when serialized.

Never returns None.

Source§

type Output = i64

Source§

fn deserialize<Buffer>( buffer: &mut Buffer, ) -> Result<Self::Output, DeserializeError>
where Buffer: Buf + ?Sized,

Source§

impl Deserialize for u8

Source§

fn size_hint() -> Option<usize>

Returns the size of self when serialized.

Never returns None.

Source§

type Output = u8

Source§

fn deserialize<Buffer>( buffer: &mut Buffer, ) -> Result<Self::Output, DeserializeError>
where Buffer: Buf + ?Sized,

Source§

impl Deserialize for u16

Source§

fn size_hint() -> Option<usize>

Returns the size of self when serialized.

Never returns None.

Source§

type Output = u16

Source§

fn deserialize<Buffer>( buffer: &mut Buffer, ) -> Result<Self::Output, DeserializeError>
where Buffer: Buf + ?Sized,

Source§

impl Deserialize for u32

Source§

fn size_hint() -> Option<usize>

Returns the size of self when serialized.

Never returns None.

Source§

type Output = u32

Source§

fn deserialize<Buffer>( buffer: &mut Buffer, ) -> Result<Self::Output, DeserializeError>
where Buffer: Buf + ?Sized,

Source§

impl Deserialize for u64

Source§

fn size_hint() -> Option<usize>

Returns the size of self when serialized.

Never returns None.

Source§

type Output = u64

Source§

fn deserialize<Buffer>( buffer: &mut Buffer, ) -> Result<Self::Output, DeserializeError>
where Buffer: Buf + ?Sized,

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<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>> 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>> 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>> 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>> 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>> 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>> 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>> Deserialize for (A, B, C, D)

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>> Deserialize for (A, B)

Source§

type Output = (A, B)

Source§

fn deserialize<Buffer>( buffer: &mut Buffer, ) -> Result<Self::Output, DeserializeError>
where Buffer: Buf + ?Sized,

Source§

fn size_hint() -> Option<usize>

Source§

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

Source§

type Output = (A,)

Source§

fn deserialize<Buffer>( buffer: &mut Buffer, ) -> Result<Self::Output, DeserializeError>
where Buffer: Buf + ?Sized,

Source§

fn size_hint() -> Option<usize>

Source§

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

Source§

type Output = [T; N]

Source§

fn deserialize<Buffer>( buffer: &mut Buffer, ) -> Result<Self::Output, DeserializeError>
where Buffer: Buf + ?Sized,

Source§

fn size_hint() -> Option<usize>

Source§

impl<T> Deserialize for Arc<T>
where T: Deserialize<Output = T>, Arc<T>: From<T>,

Source§

type Output = Arc<T>

Source§

fn deserialize<Buffer>( buffer: &mut Buffer, ) -> Result<Self::Output, DeserializeError>
where Buffer: Buf + ?Sized,

Source§

fn size_hint() -> Option<usize>

Source§

impl<T> Deserialize for Box<T>
where T: Deserialize<Output = T>, Box<T>: From<T>,

Source§

type Output = Box<T>

Source§

fn deserialize<Buffer>( buffer: &mut Buffer, ) -> Result<Self::Output, DeserializeError>
where Buffer: Buf + ?Sized,

Source§

fn size_hint() -> Option<usize>

Source§

impl<T> Deserialize for Rc<T>
where T: Deserialize<Output = T>, Rc<T>: From<T>,

Source§

type Output = Rc<T>

Source§

fn deserialize<Buffer>( buffer: &mut Buffer, ) -> Result<Self::Output, DeserializeError>
where Buffer: Buf + ?Sized,

Source§

fn size_hint() -> Option<usize>

Implementors§

Source§

impl Deserialize for Bytes

Source§

impl<Encoding, Value, const N: usize> Deserialize for StaticString<N, Encoding, Value>
where Encoding: Encoding, Value: From<String>,

Source§

type Output = Value

Source§

impl<Length, Collection> Deserialize for DynamicArray<Length, Collection>
where Length: Length, Collection: IntoIterator + FromIterator<<Collection::Item as Deserialize>::Output>, Collection::Item: Deserialize,

Source§

type Output = Collection

Source§

impl<Length, Encoding, Value> Deserialize for DynamicString<Length, Encoding, Value>
where Length: Length, Encoding: Encoding, Value: From<String>,

Source§

type Output = Value

Source§

impl<Length, Value> Deserialize for DeserializeWithLength<Length, Value>
where Length: Length, Value: Deserialize,

Source§

type Output = <Value as Deserialize>::Output