Trait Decode

Source
pub trait Decode<'de>: Sized {
    // Required method
    fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>;
}
Expand description

A general purpose trait for msgpack deserialization. Reads self from a reader supplied in r.

For most use cases this trait can be derived (#[derive(Decode)]). When deriving the trait for a structure it’s possible to additionally specify if the structure should be represented as MP_MAP or as an MP_ARRAY. MP_ARRAY is chosen by default for compactness. To deserailize a structure as an MP_MAP add [encode(as_map)] attribute to it.

E.g. given let foo = Foo { a: 1, b: 3} As MP_ARRAY foo should be identical to (1, 3) during serialization. As MP_MAP foo should be identical to HashMap<String, usize> with keys "a" and "b" and values 1, 3 accordingly.

context.style let’s you override as_map attribute if it is defined for a struct. does not override behavior of std types. To override supply Encode::ForceAsMap or StructStyle::ForceAsArray. To leave the behavior up to the struct set it to Encode::Default.

It is also possible to put #[encode(as_raw)] attribute on fields of structs or variants of enums to interpret field or variant value as raw MessagePack value. This will validate them at runtime and directly write to or read from buffer.

Fields with type Option<T> can be skipped in msgpack if decoding MP_MAP. In case of an MP_ARRAY (if #[encode(allow_array_optionals)] is enabled) only last fields with type of Option<T> can be skipped.

It should replace tuple::Decode when it’s ready.

§Example

use tarantool::msgpack::Decode;

#[derive(Decode, Debug, PartialEq)]
struct Foo {
    a: usize,
    b: usize,
};

let buffer: Vec<u8> = vec![0x92, 0x01, 0x03];
let foo = <Foo as Decode>::decode(&mut &buffer[..], &Default::default()).unwrap();
assert_eq!(foo, Foo {a: 1, b: 3});

Required Methods§

Source

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

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<'de> Decode<'de> for &'de str

Source§

fn decode(r: &mut &'de [u8], _context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de> Decode<'de> for bool

Source§

fn decode(r: &mut &'de [u8], _context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de> Decode<'de> for char

Source§

fn decode(r: &mut &'de [u8], _context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de> Decode<'de> for f32

Source§

fn decode(r: &mut &'de [u8], _context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de> Decode<'de> for f64

Source§

fn decode(r: &mut &'de [u8], _context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de> Decode<'de> for i8

Source§

fn decode(r: &mut &'de [u8], _context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de> Decode<'de> for i16

Source§

fn decode(r: &mut &'de [u8], _context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de> Decode<'de> for i32

Source§

fn decode(r: &mut &'de [u8], _context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de> Decode<'de> for i64

Source§

fn decode(r: &mut &'de [u8], _context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de> Decode<'de> for isize

Source§

fn decode(r: &mut &'de [u8], _context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de> Decode<'de> for u8

Source§

fn decode(r: &mut &'de [u8], _context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de> Decode<'de> for u16

Source§

fn decode(r: &mut &'de [u8], _context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de> Decode<'de> for u32

Source§

fn decode(r: &mut &'de [u8], _context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de> Decode<'de> for u64

Source§

fn decode(r: &mut &'de [u8], _context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de> Decode<'de> for ()

Source§

fn decode(r: &mut &'de [u8], _context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de> Decode<'de> for usize

Source§

fn decode(r: &mut &'de [u8], _context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de> Decode<'de> for String

Source§

fn decode(r: &mut &'de [u8], _context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P> Decode<'de> for (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P)
where A: Decode<'de>, B: Decode<'de>, C: Decode<'de>, D: Decode<'de>, E: Decode<'de>, F: Decode<'de>, G: Decode<'de>, H: Decode<'de>, I: Decode<'de>, J: Decode<'de>, K: Decode<'de>, L: Decode<'de>, M: Decode<'de>, N: Decode<'de>, O: Decode<'de>, P: Decode<'de>,

Source§

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P> Decode<'de> for (B, C, D, E, F, G, H, I, J, K, L, M, N, O, P)
where B: Decode<'de>, C: Decode<'de>, D: Decode<'de>, E: Decode<'de>, F: Decode<'de>, G: Decode<'de>, H: Decode<'de>, I: Decode<'de>, J: Decode<'de>, K: Decode<'de>, L: Decode<'de>, M: Decode<'de>, N: Decode<'de>, O: Decode<'de>, P: Decode<'de>,

Source§

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de, C, D, E, F, G, H, I, J, K, L, M, N, O, P> Decode<'de> for (C, D, E, F, G, H, I, J, K, L, M, N, O, P)
where C: Decode<'de>, D: Decode<'de>, E: Decode<'de>, F: Decode<'de>, G: Decode<'de>, H: Decode<'de>, I: Decode<'de>, J: Decode<'de>, K: Decode<'de>, L: Decode<'de>, M: Decode<'de>, N: Decode<'de>, O: Decode<'de>, P: Decode<'de>,

Source§

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de, D, E, F, G, H, I, J, K, L, M, N, O, P> Decode<'de> for (D, E, F, G, H, I, J, K, L, M, N, O, P)
where D: Decode<'de>, E: Decode<'de>, F: Decode<'de>, G: Decode<'de>, H: Decode<'de>, I: Decode<'de>, J: Decode<'de>, K: Decode<'de>, L: Decode<'de>, M: Decode<'de>, N: Decode<'de>, O: Decode<'de>, P: Decode<'de>,

Source§

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de, E, F, G, H, I, J, K, L, M, N, O, P> Decode<'de> for (E, F, G, H, I, J, K, L, M, N, O, P)
where E: Decode<'de>, F: Decode<'de>, G: Decode<'de>, H: Decode<'de>, I: Decode<'de>, J: Decode<'de>, K: Decode<'de>, L: Decode<'de>, M: Decode<'de>, N: Decode<'de>, O: Decode<'de>, P: Decode<'de>,

Source§

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de, F, G, H, I, J, K, L, M, N, O, P> Decode<'de> for (F, G, H, I, J, K, L, M, N, O, P)
where F: Decode<'de>, G: Decode<'de>, H: Decode<'de>, I: Decode<'de>, J: Decode<'de>, K: Decode<'de>, L: Decode<'de>, M: Decode<'de>, N: Decode<'de>, O: Decode<'de>, P: Decode<'de>,

Source§

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de, G, H, I, J, K, L, M, N, O, P> Decode<'de> for (G, H, I, J, K, L, M, N, O, P)
where G: Decode<'de>, H: Decode<'de>, I: Decode<'de>, J: Decode<'de>, K: Decode<'de>, L: Decode<'de>, M: Decode<'de>, N: Decode<'de>, O: Decode<'de>, P: Decode<'de>,

Source§

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de, H, I, J, K, L, M, N, O, P> Decode<'de> for (H, I, J, K, L, M, N, O, P)
where H: Decode<'de>, I: Decode<'de>, J: Decode<'de>, K: Decode<'de>, L: Decode<'de>, M: Decode<'de>, N: Decode<'de>, O: Decode<'de>, P: Decode<'de>,

Source§

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de, I, J, K, L, M, N, O, P> Decode<'de> for (I, J, K, L, M, N, O, P)
where I: Decode<'de>, J: Decode<'de>, K: Decode<'de>, L: Decode<'de>, M: Decode<'de>, N: Decode<'de>, O: Decode<'de>, P: Decode<'de>,

Source§

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de, J, K, L, M, N, O, P> Decode<'de> for (J, K, L, M, N, O, P)
where J: Decode<'de>, K: Decode<'de>, L: Decode<'de>, M: Decode<'de>, N: Decode<'de>, O: Decode<'de>, P: Decode<'de>,

Source§

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de, K, L, M, N, O, P> Decode<'de> for (K, L, M, N, O, P)
where K: Decode<'de>, L: Decode<'de>, M: Decode<'de>, N: Decode<'de>, O: Decode<'de>, P: Decode<'de>,

Source§

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de, K, V> Decode<'de> for BTreeMap<K, V>
where K: Decode<'de> + Ord, V: Decode<'de>,

Source§

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de, K, V> Decode<'de> for HashMap<K, V>
where K: Decode<'de> + Ord + Hash, V: Decode<'de>,

Source§

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de, L, M, N, O, P> Decode<'de> for (L, M, N, O, P)
where L: Decode<'de>, M: Decode<'de>, N: Decode<'de>, O: Decode<'de>, P: Decode<'de>,

Source§

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de, M, N, O, P> Decode<'de> for (M, N, O, P)
where M: Decode<'de>, N: Decode<'de>, O: Decode<'de>, P: Decode<'de>,

Source§

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de, N, O, P> Decode<'de> for (N, O, P)
where N: Decode<'de>, O: Decode<'de>, P: Decode<'de>,

Source§

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de, O, P> Decode<'de> for (O, P)
where O: Decode<'de>, P: Decode<'de>,

Source§

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de, P> Decode<'de> for (P,)
where P: Decode<'de>,

Source§

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de, T> Decode<'de> for Cow<'_, T>
where T: Decode<'de> + ToOwned,

Source§

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de, T> Decode<'de> for Option<T>
where T: Decode<'de>,

Source§

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de, T> Decode<'de> for Box<T>
where T: Decode<'de>,

Source§

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de, T> Decode<'de> for BTreeSet<T>
where T: Decode<'de> + Ord + Eq,

Source§

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de, T> Decode<'de> for Rc<T>
where T: Decode<'de>,

Source§

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de, T> Decode<'de> for Vec<T>
where T: Decode<'de>,

Source§

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de, T> Decode<'de> for HashSet<T>
where T: Decode<'de> + Hash + Eq,

Source§

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

Source§

impl<'de, T, const N: usize> Decode<'de> for [T; N]
where T: Decode<'de>,

Source§

fn decode(r: &mut &'de [u8], context: &Context) -> Result<Self, DecodeError>

Implementors§

Source§

impl<'de> Decode<'de> for AuthMethod

Source§

impl<'de> Decode<'de> for tarantool::index::FieldType

Source§

impl<'de> Decode<'de> for IndexType

Source§

impl<'de> Decode<'de> for RtreeIndexDistanceType

Source§

impl<'de> Decode<'de> for tarantool::space::FieldType

Source§

impl<'de> Decode<'de> for SpaceEngineType

Source§

impl<'de> Decode<'de> for tarantool::tuple::FieldType

Source§

impl<'de> Decode<'de> for Datetime

Source§

impl<'de> Decode<'de> for Field

Source§

impl<'de> Decode<'de> for Uuid

Source§

impl<'de> Decode<'de> for ExtStruct<'de>