pub const MAX_SPEED: u8 = 100;
pub fn validate_speed(speed: u8) -> Result<(), ()> {
if speed > MAX_SPEED {
Err(())
} else {
Ok(())
}
}
#[derive(Clone, Copy, PartialEq)]
pub enum FtMotorCommand {
Forward(u8),
Backward(u8),
Stop,
Coast,
}
pub trait FtMotor<E> {
fn forward(&mut self, speed: u8) -> Result<(), E>;
fn backward(&mut self, speed: u8) -> Result<(), E>;
fn coast(&mut self) -> Result<(), E>;
fn stop(&mut self) -> Result<(), E>;
fn drive(&mut self, cmd: FtMotorCommand) -> Result<(), E> {
match cmd {
FtMotorCommand::Forward(speed) => self.forward(speed),
FtMotorCommand::Backward(speed) => self.backward(speed),
FtMotorCommand::Stop => self.stop(),
FtMotorCommand::Coast => self.coast(),
}
}
}