Trait TryFromSlice
pub trait TryFromSlice {
// Required method
fn try_from_slice(
slice: &[u8],
pos: &mut usize,
) -> Result<Self, &'static str>
where Self: Sized;
}Expand description
A deserializer that reads a slice and stores output data in a struct.
§Examples
use grib_template_helpers::{TryFromSlice, TryFromSliceResult};
#[derive(Debug, PartialEq, Eq)]
struct VariableLength {
len: u8,
seq: Vec<u8>,
}
impl TryFromSlice for VariableLength {
fn try_from_slice(slice: &[u8], pos: &mut usize) -> TryFromSliceResult<Self> {
if slice.len() == 0 {
return Err("too short slice");
}
let len = slice[*pos];
*pos += 1;
let end = *pos + usize::from(len);
if slice.len() < end {
return Err("too short slice");
}
let seq = slice[*pos..end].to_vec();
Ok(Self { len, seq })
}
}
let mut pos = 0;
let actual = VariableLength::try_from_slice(&[0], &mut pos);
let expected = Ok(VariableLength {
len: 0,
seq: Vec::new(),
});
assert_eq!(actual, expected);
let mut pos = 0;
let actual = VariableLength::try_from_slice(&[3, 1, 2, 3], &mut pos);
let expected = Ok(VariableLength {
len: 3,
seq: vec![1, 2, 3],
});
assert_eq!(actual, expected);Required Methods§
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".