Trait Read

Source
pub trait Read<Cfg: Config = ()>: Sized {
    // Required method
    fn read_cfg(buf: &mut impl Buf, cfg: &Cfg) -> Result<Self, Error>;
}
Expand description

Trait for types that can be read (decoded) from a byte buffer.

The Cfg type parameter allows passing configuration during the read process. This is crucial for safely decoding untrusted data, for example, by providing size limits for collections or strings.

Use Cfg = () if no configuration is needed for a specific type.

Required Methods§

Source

fn read_cfg(buf: &mut impl Buf, cfg: &Cfg) -> Result<Self, Error>

Reads a value from the buffer using the provided configuration cfg.

Implementations should consume the exact number of bytes required from buf to reconstruct the value.

Returns Error if decoding fails due to invalid data, insufficient bytes in the buffer, or violation of constraints imposed by the cfg.

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 Read for SocketAddr

Source§

fn read_cfg(buf: &mut impl Buf, _: &()) -> Result<Self, Error>

Source§

impl Read for bool

Source§

fn read_cfg(buf: &mut impl Buf, _: &()) -> Result<Self, Error>

Source§

impl Read for f32

Source§

fn read_cfg(buf: &mut impl Buf, _: &()) -> Result<Self, Error>

Source§

impl Read for f64

Source§

fn read_cfg(buf: &mut impl Buf, _: &()) -> Result<Self, Error>

Source§

impl Read for i8

Source§

fn read_cfg(buf: &mut impl Buf, _: &()) -> Result<Self, Error>

Source§

impl Read for i16

Source§

fn read_cfg(buf: &mut impl Buf, _: &()) -> Result<Self, Error>

Source§

impl Read for i32

Source§

fn read_cfg(buf: &mut impl Buf, _: &()) -> Result<Self, Error>

Source§

impl Read for i64

Source§

fn read_cfg(buf: &mut impl Buf, _: &()) -> Result<Self, Error>

Source§

impl Read for i128

Source§

fn read_cfg(buf: &mut impl Buf, _: &()) -> Result<Self, Error>

Source§

impl Read for u8

Source§

fn read_cfg(buf: &mut impl Buf, _: &()) -> Result<Self, Error>

Source§

impl Read for u16

Source§

fn read_cfg(buf: &mut impl Buf, _: &()) -> Result<Self, Error>

Source§

impl Read for u32

Source§

fn read_cfg(buf: &mut impl Buf, _: &()) -> Result<Self, Error>

Source§

impl Read for u64

Source§

fn read_cfg(buf: &mut impl Buf, _: &()) -> Result<Self, Error>

Source§

impl Read for u128

Source§

fn read_cfg(buf: &mut impl Buf, _: &()) -> Result<Self, Error>

Source§

impl Read for Ipv4Addr

Source§

fn read_cfg(buf: &mut impl Buf, _: &()) -> Result<Self, Error>

Source§

impl Read for Ipv6Addr

Source§

fn read_cfg(buf: &mut impl Buf, _: &()) -> Result<Self, Error>

Source§

impl Read for SocketAddrV4

Source§

fn read_cfg(buf: &mut impl Buf, _: &()) -> Result<Self, Error>

Source§

impl Read for SocketAddrV6

Source§

fn read_cfg(buf: &mut impl Buf, _: &()) -> Result<Self, Error>

Source§

impl<Cfg: Config, T0: Read<Cfg>> Read<Cfg> for (T0,)

Source§

fn read_cfg(buf: &mut impl Buf, cfg: &Cfg) -> Result<Self, Error>

Source§

impl<Cfg: Config, T0: Read<Cfg>, T1: Read<Cfg>> Read<Cfg> for (T0, T1)

Source§

fn read_cfg(buf: &mut impl Buf, cfg: &Cfg) -> Result<Self, Error>

Source§

impl<Cfg: Config, T0: Read<Cfg>, T1: Read<Cfg>, T2: Read<Cfg>> Read<Cfg> for (T0, T1, T2)

Source§

fn read_cfg(buf: &mut impl Buf, cfg: &Cfg) -> Result<Self, Error>

Source§

impl<Cfg: Config, T0: Read<Cfg>, T1: Read<Cfg>, T2: Read<Cfg>, T3: Read<Cfg>> Read<Cfg> for (T0, T1, T2, T3)

Source§

fn read_cfg(buf: &mut impl Buf, cfg: &Cfg) -> Result<Self, Error>

Source§

impl<Cfg: Config, T0: Read<Cfg>, T1: Read<Cfg>, T2: Read<Cfg>, T3: Read<Cfg>, T4: Read<Cfg>> Read<Cfg> for (T0, T1, T2, T3, T4)

Source§

fn read_cfg(buf: &mut impl Buf, cfg: &Cfg) -> Result<Self, Error>

Source§

impl<Cfg: Config, T0: Read<Cfg>, T1: Read<Cfg>, T2: Read<Cfg>, T3: Read<Cfg>, T4: Read<Cfg>, T5: Read<Cfg>> Read<Cfg> for (T0, T1, T2, T3, T4, T5)

Source§

fn read_cfg(buf: &mut impl Buf, cfg: &Cfg) -> Result<Self, Error>

Source§

impl<Cfg: Config, T0: Read<Cfg>, T1: Read<Cfg>, T2: Read<Cfg>, T3: Read<Cfg>, T4: Read<Cfg>, T5: Read<Cfg>, T6: Read<Cfg>> Read<Cfg> for (T0, T1, T2, T3, T4, T5, T6)

Source§

fn read_cfg(buf: &mut impl Buf, cfg: &Cfg) -> Result<Self, Error>

Source§

impl<Cfg: Config, T0: Read<Cfg>, T1: Read<Cfg>, T2: Read<Cfg>, T3: Read<Cfg>, T4: Read<Cfg>, T5: Read<Cfg>, T6: Read<Cfg>, T7: Read<Cfg>> Read<Cfg> for (T0, T1, T2, T3, T4, T5, T6, T7)

Source§

fn read_cfg(buf: &mut impl Buf, cfg: &Cfg) -> Result<Self, Error>

Source§

impl<Cfg: Config, T0: Read<Cfg>, T1: Read<Cfg>, T2: Read<Cfg>, T3: Read<Cfg>, T4: Read<Cfg>, T5: Read<Cfg>, T6: Read<Cfg>, T7: Read<Cfg>, T8: Read<Cfg>> Read<Cfg> for (T0, T1, T2, T3, T4, T5, T6, T7, T8)

Source§

fn read_cfg(buf: &mut impl Buf, cfg: &Cfg) -> Result<Self, Error>

Source§

impl<Cfg: Config, T0: Read<Cfg>, T1: Read<Cfg>, T2: Read<Cfg>, T3: Read<Cfg>, T4: Read<Cfg>, T5: Read<Cfg>, T6: Read<Cfg>, T7: Read<Cfg>, T8: Read<Cfg>, T9: Read<Cfg>> Read<Cfg> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)

Source§

fn read_cfg(buf: &mut impl Buf, cfg: &Cfg) -> Result<Self, Error>

Source§

impl<Cfg: Config, T0: Read<Cfg>, T1: Read<Cfg>, T2: Read<Cfg>, T3: Read<Cfg>, T4: Read<Cfg>, T5: Read<Cfg>, T6: Read<Cfg>, T7: Read<Cfg>, T8: Read<Cfg>, T9: Read<Cfg>, T10: Read<Cfg>> Read<Cfg> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)

Source§

fn read_cfg(buf: &mut impl Buf, cfg: &Cfg) -> Result<Self, Error>

Source§

impl<Cfg: Config, T0: Read<Cfg>, T1: Read<Cfg>, T2: Read<Cfg>, T3: Read<Cfg>, T4: Read<Cfg>, T5: Read<Cfg>, T6: Read<Cfg>, T7: Read<Cfg>, T8: Read<Cfg>, T9: Read<Cfg>, T10: Read<Cfg>, T11: Read<Cfg>> Read<Cfg> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)

Source§

fn read_cfg(buf: &mut impl Buf, cfg: &Cfg) -> Result<Self, Error>

Source§

impl<Cfg: Config, T: Read<Cfg>> Read<Cfg> for Option<T>

Source§

fn read_cfg(buf: &mut impl Buf, cfg: &Cfg) -> Result<Self, Error>

Source§

impl<R: RangeConfig> Read<R> for Bytes

Source§

fn read_cfg(buf: &mut impl Buf, cfg: &R) -> Result<Self, Error>

Source§

impl<R: RangeConfig, Cfg: Config, T: Read<Cfg>> Read<(R, Cfg)> for Vec<T>

Source§

fn read_cfg(buf: &mut impl Buf, (range, cfg): &(R, Cfg)) -> Result<Self, Error>

Source§

impl<R: RangeConfig, KCfg: Config, VCfg: Config, K: Read<KCfg> + Clone + Ord + Hash + Eq, V: Read<VCfg> + Clone> Read<(R, (KCfg, VCfg))> for HashMap<K, V>

Source§

fn read_cfg( buf: &mut impl Buf, (range, (k_cfg, v_cfg)): &(R, (KCfg, VCfg)), ) -> Result<Self, Error>

Source§

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

Source§

fn read_cfg(buf: &mut impl Buf, _: &()) -> Result<Self, Error>

Implementors§