Вправа: події в ліфті

Ми створимо структуру даних для представлення події в системі керування ліфтом. Ви самі визначаєте типи та функції для створення різних подій. Використовуйте #[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!(
        "Пасажир першого поверху натиснув кнопку вгору: {:?}",
        lobby_call_button_pressed(0, Direction::Up)
    );
    println!("Кабіна ліфта заїхала на перший поверх: {:?}", car_arrived(0));
    println!("Двері у кабіні ліфта відчинилися: {:?}", car_door_opened());
    println!(
        "Пасажир натиснув кнопку 3-го поверху: {:?}",
        car_floor_button_pressed(3)
    );
    println!("Двері у кабіні ліфта зачинилися: {:?}", car_door_closed());
    println!("Кабіна ліфта заїхала на 3-й поверх: {:?}", car_arrived(3));
}