#[derive(Debug)]
/// Asansör sisteminde kontrolörün tepki vermesi gereken bir olay.
enum Event {
/// Bir düğmeye basıldı.
ButtonPressed(Button),
/// Araba verilen kata ulaşmış durumda.
CarArrived(Floor),
/// Arabanın kapıları açık durumda.
CarDoorOpened,
/// Arabanın kapıları kapalı durumda.
CarDoorClosed,
}
/// Bir kat tamsayı olarak temsil edilir.
type Floor = i32;
/// Bir seyahat yönü.
#[derive(Debug)]
enum Direction {
Up,
Down,
}
/// Kullanıcının erişebileceği bir düğme.
#[derive(Debug)]
enum Button {
/// Verilem katta asansör lobisinde bulunan bir düğme.
LobbyCall(Direction, Floor),
/// Arabanın içindeki bir kat düğmesi.
CarFloor(Floor),
}
/// Araba verilen kata ulaşmış durumda.
fn car_arrived(floor: i32) -> Event {
Event::CarArrived(floor)
}
/// Araba kapıları açılmış durumda.
fn car_door_opened() -> Event {
Event::CarDoorOpened
}
/// Araba kapıları kapanmış durumda.
fn car_door_closed() -> Event {
Event::CarDoorClosed
}
/// Verilen kattaki asansör lobisinde yön düğmesine basıldı.
fn lobby_call_button_pressed(floor: i32, dir: Direction) -> Event {
Event::ButtonPressed(Button::LobbyCall(dir, floor))
}
/// Asansör kabininde bir kat düğmesine basıldı.
fn car_floor_button_pressed(floor: i32) -> Event {
Event::ButtonPressed(Button::CarFloor(floor))
}
fn main() {
println!(
"Zemin kattaki bir yolcu yukarı düğmesine basmış durumda: {:?}",
lobby_call_button_pressed(0, Direction::Up)
);
println!("Araba zemin kata ulaşmış durumda: {:?}", car_arrived(0));
println!("Araba kapısı açıldı: {:?}", car_door_opened());
println!(
"Bir yolcu 3. katın düğmesine basmış durumda: {:?}",
car_floor_button_pressed(3)
);
println!("Araba kapısı kapandı: {:?}", car_door_closed());
println!("Araba 3. kata ulaşmış durumda: {:?}", car_arrived(3));
}