use crate::protocol::codec::BitSize;
pub trait SizeArgument {
const BYTE_ALIGNMENT: u8;
fn quantity_for<V: BitSize>() -> u16;
fn assert_valid_size<V: BitSize, const N_MAX_BYTES: u8>() {
const {
assert!(V::N_BYTES >= 1, "value type must be non-empty");
assert!(V::N_BYTES <= N_MAX_BYTES, "value is too large");
assert!(
V::N_BYTES.is_multiple_of(Self::BYTE_ALIGNMENT),
"value size must be word-aligned for register operations",
);
};
}
}
pub struct Bits;
impl SizeArgument for Bits {
const BYTE_ALIGNMENT: u8 = 1;
fn quantity_for<V: BitSize>() -> u16 {
V::N_BITS
}
}
pub struct Words;
impl SizeArgument for Words {
const BYTE_ALIGNMENT: u8 = 2;
fn quantity_for<V: BitSize>() -> u16 {
V::N_WORDS
}
}