Solution

#[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));
}