pub trait DeserializeView<'a>: Sized {
// Required method
fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>;
}Expand description
Types that decode by borrowing directly from the input slice rather than allocating owned copies.
'a is the lifetime of the underlying byte buffer; every borrowed field
in the decoded value points into that buffer. The borrow checker
guarantees the value cannot outlive its source.
§Examples
Borrow string and byte fields out of a request buffer:
use pack_io::{decode_view, Decode, Decoder, DeserializeView, Result, Serialize, Encode};
// Pair of borrowed and owned versions for round-tripping.
struct OwnedMsg { id: u64, text: String, payload: Vec<u8> }
struct ViewMsg<'a> { id: u64, text: &'a str, payload: &'a [u8] }
impl Serialize for OwnedMsg {
fn serialize<E: Encode + ?Sized>(&self, e: &mut E) -> Result<()> {
self.id.serialize(e)?; self.text.serialize(e)?; self.payload.serialize(e)
}
}
impl<'a> DeserializeView<'a> for ViewMsg<'a> {
fn deserialize_view(d: &mut Decoder<'a>) -> Result<Self> {
Ok(ViewMsg {
id: u64::deserialize_view(d)?,
text: <&str>::deserialize_view(d)?,
payload: <&[u8]>::deserialize_view(d)?,
})
}
}
let bytes = pack_io::encode(&OwnedMsg {
id: 7,
text: "hello".into(),
payload: vec![1, 2, 3],
}).unwrap();
let view: ViewMsg<'_> = decode_view(&bytes).unwrap();
assert_eq!(view.text, "hello"); // &str borrowed from `bytes`
assert_eq!(view.payload, &[1, 2, 3]); // &[u8] borrowed from `bytes`Required Methods§
Sourcefn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>
fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>
Read a value of Self from decoder, borrowing from its
underlying input slice where possible.
§Errors
Any crate::SerialError the underlying byte reads surface.
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<'a, K, V, S> DeserializeView<'a> for HashMap<K, V, S>
Available on crate feature std only.
impl<'a, K, V, S> DeserializeView<'a> for HashMap<K, V, S>
Available on crate feature
std only.fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>
Source§impl<'a, K, V> DeserializeView<'a> for BTreeMap<K, V>
impl<'a, K, V> DeserializeView<'a> for BTreeMap<K, V>
fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>
Source§impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>, T4: DeserializeView<'a>, T5: DeserializeView<'a>, T6: DeserializeView<'a>, T7: DeserializeView<'a>, T8: DeserializeView<'a>, T9: DeserializeView<'a>, T10: DeserializeView<'a>, T11: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)
impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>, T4: DeserializeView<'a>, T5: DeserializeView<'a>, T6: DeserializeView<'a>, T7: DeserializeView<'a>, T8: DeserializeView<'a>, T9: DeserializeView<'a>, T10: DeserializeView<'a>, T11: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)
fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>
Source§impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>, T4: DeserializeView<'a>, T5: DeserializeView<'a>, T6: DeserializeView<'a>, T7: DeserializeView<'a>, T8: DeserializeView<'a>, T9: DeserializeView<'a>, T10: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)
impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>, T4: DeserializeView<'a>, T5: DeserializeView<'a>, T6: DeserializeView<'a>, T7: DeserializeView<'a>, T8: DeserializeView<'a>, T9: DeserializeView<'a>, T10: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)
fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>
Source§impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>, T4: DeserializeView<'a>, T5: DeserializeView<'a>, T6: DeserializeView<'a>, T7: DeserializeView<'a>, T8: DeserializeView<'a>, T9: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)
impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>, T4: DeserializeView<'a>, T5: DeserializeView<'a>, T6: DeserializeView<'a>, T7: DeserializeView<'a>, T8: DeserializeView<'a>, T9: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)
fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>
Source§impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>, T4: DeserializeView<'a>, T5: DeserializeView<'a>, T6: DeserializeView<'a>, T7: DeserializeView<'a>, T8: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3, T4, T5, T6, T7, T8)
impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>, T4: DeserializeView<'a>, T5: DeserializeView<'a>, T6: DeserializeView<'a>, T7: DeserializeView<'a>, T8: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3, T4, T5, T6, T7, T8)
fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>
Source§impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>, T4: DeserializeView<'a>, T5: DeserializeView<'a>, T6: DeserializeView<'a>, T7: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3, T4, T5, T6, T7)
impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>, T4: DeserializeView<'a>, T5: DeserializeView<'a>, T6: DeserializeView<'a>, T7: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3, T4, T5, T6, T7)
fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>
Source§impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>, T4: DeserializeView<'a>, T5: DeserializeView<'a>, T6: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3, T4, T5, T6)
impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>, T4: DeserializeView<'a>, T5: DeserializeView<'a>, T6: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3, T4, T5, T6)
fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>
Source§impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>, T4: DeserializeView<'a>, T5: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3, T4, T5)
impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>, T4: DeserializeView<'a>, T5: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3, T4, T5)
fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>
Source§impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>, T4: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3, T4)
impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>, T4: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3, T4)
fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>
Source§impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3)
impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3)
fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>
Source§impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2)
impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2)
fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>
Source§impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>> DeserializeView<'a> for (T0, T1)
impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>> DeserializeView<'a> for (T0, T1)
fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>
Source§impl<'a, T0: DeserializeView<'a>> DeserializeView<'a> for (T0,)
impl<'a, T0: DeserializeView<'a>> DeserializeView<'a> for (T0,)
fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>
Source§impl<'a, T, S> DeserializeView<'a> for HashSet<T, S>
Available on crate feature std only.
impl<'a, T, S> DeserializeView<'a> for HashSet<T, S>
Available on crate feature
std only.