Skip to main content

TryFromSlice

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§

fn try_from_slice(slice: &[u8], pos: &mut usize) -> Result<Self, &'static str>
where Self: Sized,

Performs reading. The pos argument is a variable storing the starting position for reading within the slice.

As reading proceeds, this pos changes, allowing the user to track how far they have read.

Dyn Compatibility§

This trait is dyn compatible.

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

Implementations on Foreign Types§

§

impl TryFromSlice for f32

§

fn try_from_slice(slice: &[u8], pos: &mut usize) -> Result<f32, &'static str>

§

impl TryFromSlice for f64

§

fn try_from_slice(slice: &[u8], pos: &mut usize) -> Result<f64, &'static str>

§

impl TryFromSlice for i8

§

fn try_from_slice(slice: &[u8], pos: &mut usize) -> Result<i8, &'static str>

§

impl TryFromSlice for i16

§

fn try_from_slice(slice: &[u8], pos: &mut usize) -> Result<i16, &'static str>

§

impl TryFromSlice for i32

§

fn try_from_slice(slice: &[u8], pos: &mut usize) -> Result<i32, &'static str>

§

impl TryFromSlice for i64

§

fn try_from_slice(slice: &[u8], pos: &mut usize) -> Result<i64, &'static str>

§

impl TryFromSlice for u8

§

fn try_from_slice(slice: &[u8], pos: &mut usize) -> Result<u8, &'static str>

§

impl TryFromSlice for u16

§

fn try_from_slice(slice: &[u8], pos: &mut usize) -> Result<u16, &'static str>

§

impl TryFromSlice for u32

§

fn try_from_slice(slice: &[u8], pos: &mut usize) -> Result<u32, &'static str>

§

impl TryFromSlice for u64

§

fn try_from_slice(slice: &[u8], pos: &mut usize) -> Result<u64, &'static str>

§

impl<T> TryFromSlice for Option<T>
where T: TryFromSlice,

§

fn try_from_slice( slice: &[u8], pos: &mut usize, ) -> Result<Option<T>, &'static str>

§

impl<const N: usize> TryFromSlice for [u8; N]

§

fn try_from_slice( slice: &[u8], pos: &mut usize, ) -> Result<[u8; N], &'static str>

Implementors§

Source§

impl TryFromSlice for ComplexPacking

Source§

impl TryFromSlice for EarthShape

Source§

impl TryFromSlice for GaussianGrid

Source§

impl TryFromSlice for Grid

Source§

impl TryFromSlice for LatLonGrid

Source§

impl TryFromSlice for ProjectionCentreFlag

Source§

impl TryFromSlice for RefTime

Source§

impl TryFromSlice for ResolutionAndComponentFlags

Source§

impl TryFromSlice for Rotation

Source§

impl TryFromSlice for ScanningMode

Source§

impl TryFromSlice for Section0

Source§

impl TryFromSlice for Section1Payload

Source§

impl TryFromSlice for Section1PayloadOptional

Source§

impl TryFromSlice for Section3Payload

Source§

impl TryFromSlice for Section4Payload

Source§

impl TryFromSlice for Section5Payload

Source§

impl TryFromSlice for Section6Payload

Source§

impl TryFromSlice for SectionHeader

Source§

impl TryFromSlice for SimplePacking

Source§

impl TryFromSlice for Template1_0

Source§

impl TryFromSlice for Template1_1

Source§

impl TryFromSlice for Template1_2

Source§

impl TryFromSlice for Template3_0

Source§

impl TryFromSlice for Template3_1

Source§

impl TryFromSlice for Template3_20

Source§

impl TryFromSlice for Template3_30

Source§

impl TryFromSlice for Template3_40

Source§

impl TryFromSlice for Template3_101

Source§

impl TryFromSlice for Template5_0

Source§

impl TryFromSlice for Template5_1

Source§

impl TryFromSlice for Template5_2

Source§

impl TryFromSlice for Template5_3

Source§

impl TryFromSlice for Template5_4

Source§

impl TryFromSlice for Template5_40

Source§

impl TryFromSlice for Template5_41

Source§

impl TryFromSlice for Template5_42

Source§

impl TryFromSlice for Template5_50

Source§

impl TryFromSlice for Template5_51

Source§

impl TryFromSlice for Template5_53

Source§

impl TryFromSlice for Template5_61

Source§

impl TryFromSlice for Template5_200

Source§

impl<T> TryFromSlice for Section<T>