Solution

1. ```
   #[derive(Debug)]
   ```
2. ```
   /// An event in the elevator system that the controller must react to.
   ```
3. ```
   enum Event {
   ```
4. ```
       /// A button was pressed.
   ```
5. ```
       ButtonPressed(Button),
   ```

7. ```
       /// The car has arrived at the given floor.
   ```
8. ```
       CarArrived(Floor),
   ```

10. ```
        /// The car's doors have opened.
    ```
11. ```
        CarDoorOpened,
    ```

13. ```
        /// The car's doors have closed.
    ```
14. ```
        CarDoorClosed,
    ```
15. ```
    }
    ```

17. ```
    /// A floor is represented as an integer.
    ```
18. ```
    type Floor = i32;
    ```

20. ```
    /// A direction of travel.
    ```
21. ```
    #[derive(Debug)]
    ```
22. ```
    enum Direction {
    ```
23. ```
        Up,
    ```
24. ```
        Down,
    ```
25. ```
    }
    ```

27. ```
    /// A user-accessible button.
    ```
28. ```
    #[derive(Debug)]
    ```
29. ```
    enum Button {
    ```
30. ```
        /// A button in the elevator lobby on the given floor.
    ```
31. ```
        LobbyCall(Direction, Floor),
    ```

33. ```
        /// A floor button within the car.
    ```
34. ```
        CarFloor(Floor),
    ```
35. ```
    }
    ```

37. ```
    /// The car has arrived on the given floor.
    ```
38. ```
    fn car_arrived(floor: i32) -> Event {
    ```
39. ```
        Event::CarArrived(floor)
    ```
40. ```
    }
    ```

42. ```
    /// The car doors have opened.
    ```
43. ```
    fn car_door_opened() -> Event {
    ```
44. ```
        Event::CarDoorOpened
    ```
45. ```
    }
    ```

47. ```
    /// The car doors have closed.
    ```
48. ```
    fn car_door_closed() -> Event {
    ```
49. ```
        Event::CarDoorClosed
    ```
50. ```
    }
    ```

52. ```
    /// A directional button was pressed in an elevator lobby on the given floor.
    ```
53. ```
    fn lobby_call_button_pressed(floor: i32, dir: Direction) -> Event {
    ```
54. ```
        Event::ButtonPressed(Button::LobbyCall(dir, floor))
    ```
55. ```
    }
    ```

57. ```
    /// A floor button was pressed in the elevator car.
    ```
58. ```
    fn car_floor_button_pressed(floor: i32) -> Event {
    ```
59. ```
        Event::ButtonPressed(Button::CarFloor(floor))
    ```
60. ```
    }
    ```

62. ```
    fn main() {
    ```
63. ```
        println!(
    ```
64. ```
            "A ground floor passenger has pressed the up button: {:?}",
    ```
65. ```
            lobby_call_button_pressed(0, Direction::Up)
    ```
66. ```
        );
    ```
67. ```
        println!("The car has arrived on the ground floor: {:?}", car_arrived(0));
    ```
68. ```
        println!("The car door opened: {:?}", car_door_opened());
    ```
69. ```
        println!(
    ```
70. ```
            "A passenger has pressed the 3rd floor button: {:?}",
    ```
71. ```
            car_floor_button_pressed(3)
    ```
72. ```
        );
    ```
73. ```
        println!("The car door closed: {:?}", car_door_closed());
    ```
74. ```
        println!("The car has arrived on the 3rd floor: {:?}", car_arrived(3));
    ```
75. ```
    }
    ```