pub trait PackedField: Sized + Copy {
const MAX_BITS: u32;
// Required methods
fn to_bits(self, bits: u32) -> Result<u64>;
fn from_bits(raw: u64, bits: u32) -> Result<Self>;
}Expand description
A type that can be stored as a fixed-width bit field in a
packed_struct!.
§Example
use wire_codec::packed::PackedField;
use wire_codec::{packed_struct, Decode, Error, ReadBuf, Result};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
enum Kind { Data, Ack, Nak }
impl PackedField for Kind {
const MAX_BITS: u32 = 2;
fn to_bits(self, _bits: u32) -> Result<u64> {
Ok(self as u64)
}
fn from_bits(raw: u64, _bits: u32) -> Result<Self> {
match raw {
0 => Ok(Kind::Data),
1 => Ok(Kind::Ack),
2 => Ok(Kind::Nak),
_ => Err(Error::InvalidEncoding),
}
}
}
packed_struct! {
#[derive(Debug, PartialEq, Eq)]
struct Header {
kind: Kind = 2,
seq: u8 = 6,
}
}
let header = Header::decode(&mut ReadBuf::new(&[0b01_000011])).unwrap();
assert_eq!(header, Header { kind: Kind::Ack, seq: 3 });Required Associated Constants§
Required Methods§
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".