homework: demo

This commit is contained in:
2 changed files with 105 additions and 8 deletions

View File

@@ -95,11 +95,11 @@
Привести тесты в соответствие с новым функционалом.
Доработать приложение-пример:
- [ ] Продемонстрировать возможность динамического добавления/удаления комнат.
- [ ] Продемонстрировать возможность динамического добавления/удаления устройств.
- [ ] Добавить функцию, которая принимает любой объект, умеющий выводить отчёт. Вывести с её помощью отчёты о доме,
- [x] Продемонстрировать возможность динамического добавления/удаления комнат.
- [x] Продемонстрировать возможность динамического добавления/удаления устройств.
- [x] Добавить функцию, которая принимает любой объект, умеющий выводить отчёт. Вывести с её помощью отчёты о доме,
отдельной комнате, отдельном устройстве.
- [ ] Продемонстрировать возможность обработки ошибок.
- [x] Продемонстрировать возможность обработки ошибок.
**Критерии оценки**:

View File

@@ -1,7 +1,26 @@
use smart_house::{Device, House, PowerSocket, PrintStatus, Room, Thermometer, room};
fn main() {
let mut house = House::new(
let mut house = create_house_demo();
switch_off_power_socket_in_hall_demo(&mut house);
add_new_room_in_house_demo(&mut house);
add_power_socket_to_closet_room_demo(&mut house);
remove_thermometer_from_closet_room_demo(&mut house);
remove_closet_room_demo(&mut house);
searching_devices_in_house_demo(&house);
universal_printing_function_demo(&house);
}
fn create_house_demo() -> House {
println!("# Create new smart house");
let house = House::new(
[
(
"Hall".to_string(),
@@ -29,9 +48,11 @@ fn main() {
.into_iter()
.collect(),
);
house.print_status();
house
}
fn switch_off_power_socket_in_hall_demo(house: &mut House) {
print!("# Switching off a power socket in Hall... ");
let Device::PowerSocket(power_socket) = house.get_room_mut("Hall").unwrap().get_device_mut("PSocA").unwrap() else {
println!("FAILED!");
@@ -39,7 +60,83 @@ fn main() {
};
power_socket.set_on(false);
println!("SUCCESS");
println!();
house.print_status();
}
fn add_new_room_in_house_demo(house: &mut House) {
println!("# Add new room into house");
house.insert_room(
"Closet",
room!(
"ThermD" => Thermometer::new(9.5)
),
);
house.print_status();
}
fn add_power_socket_to_closet_room_demo(house: &mut House) {
println!("# Add power socket to 'Closet' room");
house.get_room_mut("Closet").unwrap().insert_device("PSocE", PowerSocket::new(8.0, true).into());
house.print_status();
}
fn remove_thermometer_from_closet_room_demo(house: &mut House) {
print!("# Removing thermometer from 'Closet' room... ");
let Some(_) = house.get_room_mut("Closet").unwrap().remove_device("ThermD") else {
println!("FAILED!");
return;
};
println!("SUCCESS");
house.print_status();
}
fn remove_closet_room_demo(house: &mut House) {
print!("# Removing 'Closet' room... ");
let Some(_) = house.remove_room("Closet") else {
println!("FAILED!");
return;
};
println!("SUCCESS");
house.print_status();
}
fn searching_devices_in_house_demo(house: &House) {
println!("# Searching dummy device in empty room");
find_device_handling_errors_demo(house, "empty", "dummy");
println!("# Searching dummy device in Bedroom");
find_device_handling_errors_demo(house, "Bedroom", "dummy");
println!("# Searching ThermA device in Hall room");
find_device_handling_errors_demo(house, "Hall", "ThermA");
println!();
}
fn find_device_handling_errors_demo(house: &House, room: &str, device: &str) {
match house.get_device(room, device) {
Err(error) => {
println!("FAIL. Error: {:?}", error);
}
Ok(device) => {
print!("SUCCESS. Device found: ");
device.print_status();
}
}
}
fn universal_printing_function_demo(house: &House) {
println!("# Print house using universal function");
print_status(house);
println!("# Print Main room using universal function");
print_status(house.get_room("Main").unwrap());
println!();
println!("# Print PSocC device from Main room using universal function");
print_status(house.get_device("Main", "PSocC").unwrap());
}
fn print_status(printable: &impl PrintStatus) {
printable.print_status();
}