演習: エレベーターでのイベント

エレベーター制御システムでイベントを表すデータ構造を作成します。さまざまなイベントを構築するための型と関数を自由に定義して構いません。#[derive(Debug)] を使用して、型を {:?} でフォーマットできるようにします。

この演習に必要なのは、main がエラーなしで実行されるように、データ構造を作成して入力することだけです。このコースの次のパートでは、これらの構造からデータを取得する方法を説明します。

#[derive(Debug)]
/// コントローラが反応する必要があるエレベーター システム内のイベント。
enum Event {
    // TODO: 必要なバリアントを追加する
}

/// 運転方向。
#[derive(Debug)]
enum Direction {
    Up,
    Down,
}

/// かごが所定の階に到着した。
fn car_arrived(floor: i32) -> Event {
    todo!()
}

/// かごのドアが開いた。
fn car_door_opened() -> Event {
    todo!()
}

/// かごのドアが閉まった。
fn car_door_closed() -> Event {
    todo!()
}

/// 所定の階のエレベーター ロビーで方向ボタンが押された。
fn lobby_call_button_pressed(floor: i32, dir: Direction) -> Event {
    todo!()
}

/// エレベーターのかごの階数ボタンが押された。
fn car_floor_button_pressed(floor: i32) -> Event {
    todo!()
}

fn main() {
    println!(
        "A ground floor passenger has pressed the up button: {:?}",
        lobby_call_button_pressed(0, Direction::Up)
    );
    println!("The car has arrived on the ground floor: {:?}", car_arrived(0));
    println!("The car door opened: {:?}", car_door_opened());
    println!(
        "A passenger has pressed the 3rd floor button: {:?}",
        car_floor_button_pressed(3)
    );
    println!("The car door closed: {:?}", car_door_closed());
    println!("The car has arrived on the 3rd floor: {:?}", car_arrived(3));
}