#[derive(Debug)]
/// ์ปจํธ๋กค๋ฌ๊ฐ ๋ฐ์ํด์ผ ํ๋ ์๋ฆฌ๋ฒ ์ดํฐ ์์คํ
์ ์ด๋ฒคํธ์
๋๋ค.
enum Event {
/// ๋ฒํผ์ ๋๋ ์ต๋๋ค.
ButtonPressed(Button),
/// ์๋ฆฌ๋ฒ ์ดํฐ๊ฐ ์ง์ ๋ ์ธต์ ๋์ฐฉํ์ต๋๋ค.
CarArrived(Floor),
/// ์๋ฆฌ๋ฒ ์ดํฐ ๋ฌธ์ด ์ด๋ ธ์ต๋๋ค.
CarDoorOpened,
/// ์๋ฆฌ๋ฒ ์ดํฐ ๋ฌธ์ด ๋ซํ์ต๋๋ค.
CarDoorClosed,
}
/// ์ธต์ ์ ์๋ก ํ์๋ฉ๋๋ค.
type Floor = i32;
/// ์ด๋ ๋ฐฉํฅ์
๋๋ค.
#[derive(Debug)]
enum Direction {
Up,
Down,
}
/// ์ฌ์ฉ์๊ฐ ์ก์ธ์คํ ์ ์๋ ๋ฒํผ์
๋๋ค.
#[derive(Debug)]
enum Button {
/// ํน์ ์ธต์ ์๋ฆฌ๋ฒ ์ดํฐ ๋ก๋น์ ์๋ ๋ฒํผ์
๋๋ค.
LobbyCall(Direction, Floor),
/// ์๋ฆฌ๋ฒ ์ดํฐ ๋ด๋ถ์ ์ธต ๋ฒํผ์
๋๋ค.
CarFloor(Floor),
}
/// ์๋ฆฌ๋ฒ ์ดํฐ๊ฐ ์ง์ ๋ ์ธต์ ๋์ฐฉํ์ต๋๋ค.
fn car_arrived(floor: i32) -> Event {
Event::CarArrived(floor)
}
/// ์๋ฆฌ๋ฒ ์ดํฐ ๋ฌธ์ด ์ด๋ ธ์ต๋๋ค.
fn car_door_opened() -> Event {
Event::CarDoorOpened
}
/// ์๋ฆฌ๋ฒ ์ดํฐ ๋ฌธ์ด ๋ซํ์ต๋๋ค.
fn car_door_closed() -> Event {
Event::CarDoorClosed
}
/// ์ง์ ๋ ์ธต์ ์๋ฆฌ๋ฒ ์ดํฐ ๋ก๋น์์ ๋ฐฉํฅ ๋ฒํผ์ ๋๋ ์ต๋๋ค.
fn lobby_call_button_pressed(floor: i32, dir: Direction) -> Event {
Event::ButtonPressed(Button::LobbyCall(dir, floor))
}
/// ์๋ฆฌ๋ฒ ์ดํฐ์์ ์ธต ๋ฒํผ์ ๋๋ ์ต๋๋ค.
fn car_floor_button_pressed(floor: i32) -> Event {
Event::ButtonPressed(Button::CarFloor(floor))
}
fn main() {
println!(
"1์ธต ์น๊ฐ์ด ์์ชฝ ๋ฒํผ์ ๋๋ ์ต๋๋ค. {:?}",
lobby_call_button_pressed(0, Direction::Up)
);
println!("์๋ฆฌ๋ฒ ์ดํฐ๊ฐ 1์ธต์ ๋์ฐฉํ์ต๋๋ค: {:?}", car_arrived(0));
println!("์๋ฆฌ๋ฒ ์ดํฐ ๋ฌธ์ด ์ด๋ ธ์ต๋๋ค. {:?}", car_door_opened());
println!(
"์น๊ฐ์ด 3์ธต ๋ฒํผ์ ๋๋ ์ต๋๋ค. {:?}",
car_floor_button_pressed(3)
);
println!("์๋ฆฌ๋ฒ ์ดํฐ ๋ฌธ์ด ๋ซํ์ต๋๋ค: {:?}", car_door_closed());
println!("์๋ฆฌ๋ฒ ์ดํฐ๊ฐ 3์ธต์ ๋์ฐฉํ์ต๋๋ค. {:?}", car_arrived(3));
}