homework: demo
This commit is contained in:
@@ -95,11 +95,11 @@
|
||||
Привести тесты в соответствие с новым функционалом.
|
||||
|
||||
Доработать приложение-пример:
|
||||
- [ ] Продемонстрировать возможность динамического добавления/удаления комнат.
|
||||
- [ ] Продемонстрировать возможность динамического добавления/удаления устройств.
|
||||
- [ ] Добавить функцию, которая принимает любой объект, умеющий выводить отчёт. Вывести с её помощью отчёты о доме,
|
||||
- [x] Продемонстрировать возможность динамического добавления/удаления комнат.
|
||||
- [x] Продемонстрировать возможность динамического добавления/удаления устройств.
|
||||
- [x] Добавить функцию, которая принимает любой объект, умеющий выводить отчёт. Вывести с её помощью отчёты о доме,
|
||||
отдельной комнате, отдельном устройстве.
|
||||
- [ ] Продемонстрировать возможность обработки ошибок.
|
||||
- [x] Продемонстрировать возможность обработки ошибок.
|
||||
|
||||
**Критерии оценки**:
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user