use crate::fields::{primitive::copy_access::FieldCopyAccess, Field};
use crate::utils::infallible::{InfallibleResultExt, IsInfallible};
pub trait FieldReadExt: Field {
type HighLevelType;
fn read(storage: &[u8]) -> Self::HighLevelType;
}
pub trait FieldWriteExt: Field {
type HighLevelType;
fn write(storage: &mut [u8], v: Self::HighLevelType);
}
impl<F> FieldReadExt for F
where
F: FieldCopyAccess,
F::ReadError: IsInfallible,
{
type HighLevelType = F::HighLevelType;
#[inline(always)]
fn read(storage: &[u8]) -> Self::HighLevelType {
F::try_read(storage).infallible_unwrap()
}
}
impl<F> FieldWriteExt for F
where
F: FieldCopyAccess,
F::WriteError: IsInfallible,
{
type HighLevelType = F::HighLevelType;
#[inline(always)]
fn write(storage: &mut [u8], value: Self::HighLevelType) {
F::try_write(storage, value).infallible_unwrap()
}
}