ReadFrom

Trait ReadFrom 

Source
pub trait ReadFrom: Sized {
    type Error;

    // Required method
    fn read_from<R: Read>(input: R) -> Result<Self, Self::Error>;
}
Expand description

Used to deserialize types from an input stream (i.e. a Read implementation).

§Example

This implements ReadFrom for a simple TinyRational struct.

use read_from::ReadFrom;
use std::io::{self, Cursor, Read};

#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct TinyRational {
   numer: i8,
   denom: u8
}
 
#[derive(Debug)]
pub enum TinyRationalReadError {
   DenomIsZero,
   Io(io::Error)
}

impl ReadFrom for TinyRational {
   type Error = TinyRationalReadError;

   fn read_from<R: Read>(mut inp: R) -> Result<Self, Self::Error> {
      let mut buf = [0; 2];
      inp.read_exact(&mut buf).map_err(TinyRationalReadError::Io)?;
      let numer = buf[0] as i8;
      let denom = buf[1] as u8;
      if denom == 0 {
         Err(TinyRationalReadError::DenomIsZero)
      } else {
         Ok(Self { numer, denom })
      }
   }
}

assert_eq!(
   TinyRational::read_from(Cursor::new(&[3, 4])).unwrap(),
   TinyRational { numer: 3, denom: 4 });
assert!(matches!(
   TinyRational::read_from(Cursor::new(&[3, 0])).unwrap_err(),
   TinyRationalReadError::DenomIsZero
));

Required Associated Types§

Source

type Error

What error can happen when trying to read?

Required Methods§

Source

fn read_from<R: Read>(input: R) -> Result<Self, Self::Error>

Attempts to construct Self from the given input stream.

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 ReadFrom for i8

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for u8

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 0]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 1]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 2]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 3]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 4]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 5]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 6]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 7]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 8]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 9]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 10]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 11]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 12]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 13]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 14]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 15]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 16]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 17]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 18]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 19]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 20]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 21]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 22]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 23]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 24]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 25]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 26]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 27]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 28]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 29]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 30]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 31]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 32]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 50]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 64]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 100]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 128]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 250]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 256]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 500]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 512]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 1000]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 1024]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 2048]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 2500]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 4096]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 5000]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 8192]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Source§

impl ReadFrom for [u8; 10000]

Source§

type Error = Error

Source§

fn read_from<R: Read>(inp: R) -> Result<Self, Self::Error>

Implementors§

Source§

impl ReadFrom for BigEndian<f32>

Source§

impl ReadFrom for BigEndian<f64>

Source§

impl ReadFrom for BigEndian<i8>

Source§

impl ReadFrom for BigEndian<i16>

Source§

impl ReadFrom for BigEndian<i32>

Source§

impl ReadFrom for BigEndian<i64>

Source§

impl ReadFrom for BigEndian<i128>

Source§

impl ReadFrom for BigEndian<isize>

Source§

impl ReadFrom for BigEndian<u8>

Source§

impl ReadFrom for BigEndian<u16>

Source§

impl ReadFrom for BigEndian<u32>

Source§

impl ReadFrom for BigEndian<u64>

Source§

impl ReadFrom for BigEndian<u128>

Source§

impl ReadFrom for BigEndian<usize>

Source§

impl ReadFrom for LittleEndian<f32>

Source§

impl ReadFrom for LittleEndian<f64>

Source§

impl ReadFrom for LittleEndian<i8>

Source§

impl ReadFrom for LittleEndian<i16>

Source§

impl ReadFrom for LittleEndian<i32>

Source§

impl ReadFrom for LittleEndian<i64>

Source§

impl ReadFrom for LittleEndian<i128>

Source§

impl ReadFrom for LittleEndian<isize>

Source§

impl ReadFrom for LittleEndian<u8>

Source§

impl ReadFrom for LittleEndian<u16>

Source§

impl ReadFrom for LittleEndian<u32>

Source§

impl ReadFrom for LittleEndian<u64>

Source§

impl ReadFrom for LittleEndian<u128>

Source§

impl ReadFrom for LittleEndian<usize>

Source§

impl ReadFrom for NativeEndian<f32>

Source§

impl ReadFrom for NativeEndian<f64>

Source§

impl ReadFrom for NativeEndian<i8>

Source§

impl ReadFrom for NativeEndian<i16>

Source§

impl ReadFrom for NativeEndian<i32>

Source§

impl ReadFrom for NativeEndian<i64>

Source§

impl ReadFrom for NativeEndian<i128>

Source§

impl ReadFrom for NativeEndian<isize>

Source§

impl ReadFrom for NativeEndian<u8>

Source§

impl ReadFrom for NativeEndian<u16>

Source§

impl ReadFrom for NativeEndian<u32>

Source§

impl ReadFrom for NativeEndian<u64>

Source§

impl ReadFrom for NativeEndian<u128>

Source§

impl ReadFrom for NativeEndian<usize>