#[derive(Debug)]
/// An event in the elevator system that the controller must react to.
enum Event {
/// A button was pressed.
ButtonPressed(Button),
/// Driver pushes the break pedal.
BreakPedalPushed(Percentage),
/// The car's doors have opened.
CarDoorOpened(Door),
/// The car's doors have closed.
CarDoorClosed(Door),
/// Car completely stopped
CarStopped,
}
/// The push of the break pedal is represented by a floating-point percentage.
type Percentage = f32;
#[derive(Debug)]
/// A user-accessible button.
enum Button {
VolumenUp,
VolumenDown,
}
#[derive(Debug)]
/// Door of the car.
enum Door {
FrontLeft,
FrontRight,
BackLeft,
BackRight,
}
/// The car doors have opened.
fn car_door_opened(door: Door) -> Event {
Event::CarDoorOpened(door)
}
/// The car doors have closed.
fn car_door_closed(door: Door) -> Event {
Event::CarDoorClosed(door)
}
/// The car doors have stopped.
fn car_stopped() -> Event {
Event::CarStopped
}
/// A passenger has pressed the volume up button.
fn passenger_button_volumeup() -> Event {
Event::ButtonPressed(Button::VolumenUp)
}
/// The driver has pressed the break pedal.
fn break_pedal_pressed(amount: Percentage) -> Event {
Event::BreakPedalPushed(amount)
}
fn main() {
println!("Passenger pressed a button: {:?}", passenger_button_volumeup());
println!("Driver breaks: {:?}", break_pedal_pressed(0.79));
println!("The car has stopped: {:?}", car_stopped());
println!("Door opened: {:?}", car_door_opened(Door::FrontLeft));
println!("The car door closed: {:?}", car_door_closed(Door::FrontLeft));
}