use crate::status::SpiStatus;
pub type SpiResult<T, SPI> = Result<SpiOk<T>, SPI>;
pub struct SpiOk<T> {
pub status: SpiStatus,
pub data: T,
}
impl<T> SpiOk<T> {
pub fn map<U, F>(self, f: F) -> SpiOk<U>
where
F: Fn(T) -> U,
{
SpiOk {
status: self.status,
data: f(self.data),
}
}
}
impl SpiOk<u32> {
pub fn from_buffer(buffer: &[u8; 5]) -> Self {
Self {
status: SpiStatus::from(buffer[0]),
data: u32::from_be_bytes(buffer[1..].try_into().unwrap()),
}
}
}
impl SpiOk<()> {
pub fn from_buffer(buffer: &[u8; 5]) -> Self {
Self {
status: SpiStatus::from(buffer[0]),
data: (),
}
}
}