Implemented From trait for busses

This commit is contained in:
Jonah Dahlquist 2020-11-24 20:28:18 -08:00
commit 90604fc86a
2 changed files with 10 additions and 6 deletions

View file

@ -69,6 +69,7 @@ impl<Spi: FullDuplex<u8>, ChipSelect: OutputPin> ActiveFourWire<Spi, ChipSelect>
} }
} }
// Must use map_err, ambiguity prevents From from being implemented
#[repr(u8)] #[repr(u8)]
pub enum FourWireError<SpiError, ChipSelectError> { pub enum FourWireError<SpiError, ChipSelectError> {
SpiError(SpiError), SpiError(SpiError),
@ -87,4 +88,3 @@ impl<SpiError, ChipSelectError> fmt::Debug for FourWireError<SpiError, ChipSelec
) )
} }
} }
// TODO impl From and remove map_errs

View file

@ -81,8 +81,7 @@ impl<Spi: FullDuplex<u8>> ActiveBus for ActiveThreeWire<Spi> {
&mut self.spi, &mut self.spi,
&mut data_phase[..last_length_written as usize], &mut data_phase[..last_length_written as usize],
) )
}) })?;
.map_err(ThreeWireError::SpiError)?;
address += last_length_written; address += last_length_written;
data_phase = &mut data_phase[last_length_written as usize..]; data_phase = &mut data_phase[last_length_written as usize..];
@ -111,8 +110,7 @@ impl<Spi: FullDuplex<u8>> ActiveBus for ActiveThreeWire<Spi> {
.and_then(|_| Self::transfer_byte(&mut self.spi, control_phase)) .and_then(|_| Self::transfer_byte(&mut self.spi, control_phase))
.and_then(|_| { .and_then(|_| {
Self::write_bytes(&mut self.spi, &data_phase[..last_length_written as usize]) Self::write_bytes(&mut self.spi, &data_phase[..last_length_written as usize])
}) })?;
.map_err(ThreeWireError::SpiError)?;
address += last_length_written; address += last_length_written;
data_phase = &data_phase[last_length_written as usize..]; data_phase = &data_phase[last_length_written as usize..];
@ -130,6 +128,13 @@ impl<Spi: FullDuplex<u8>> ActiveThreeWire<Spi> {
pub enum ThreeWireError<SpiError> { pub enum ThreeWireError<SpiError> {
SpiError(SpiError), SpiError(SpiError),
} }
impl<SpiError> From<SpiError> for ThreeWireError<SpiError> {
fn from(error: SpiError) -> ThreeWireError<SpiError> {
ThreeWireError::SpiError(error)
}
}
impl<SpiError> fmt::Debug for ThreeWireError<SpiError> { impl<SpiError> fmt::Debug for ThreeWireError<SpiError> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!( write!(
@ -141,4 +146,3 @@ impl<SpiError> fmt::Debug for ThreeWireError<SpiError> {
) )
} }
} }
// TODO impl From and remove map_errs