From dc15caaaffc76e4a8f1d84e689c742a83705a1ff Mon Sep 17 00:00:00 2001 From: Alexander Baranov Date: Mon, 23 Feb 2026 15:36:36 +0300 Subject: [PATCH] homework: move old example to bin --- smart-house/src/bin/stubs_example.rs | 145 ++++++++++++++++++++++++++ smart-house/src/main.rs | 146 +-------------------------- 2 files changed, 146 insertions(+), 145 deletions(-) create mode 100644 smart-house/src/bin/stubs_example.rs diff --git a/smart-house/src/bin/stubs_example.rs b/smart-house/src/bin/stubs_example.rs new file mode 100644 index 0000000..c81b8ad --- /dev/null +++ b/smart-house/src/bin/stubs_example.rs @@ -0,0 +1,145 @@ +use smart_house::{Device, House, PowerSocket, PrintStatus, Room, Thermometer, room}; + +fn main() { + 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(), + room!( + "PSocA" => PowerSocket::stub(9.5, true), + "ThermA" => Thermometer::new(20.1), + ), + ), + ( + "Main".to_string(), + room!( + "PSocB" => PowerSocket::stub(11.2, true), + "ThermB" => Thermometer::new(24.5), + "PSocC" => PowerSocket::stub(10.4, true), + ), + ), + ( + "Bedroom".to_string(), + room!( + "ThermC" => Thermometer::new(19.3), + "PSocD" => PowerSocket::stub(12.1, true), + ), + ), + ] + .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!"); + return; + }; + power_socket.set_on(false); + println!("SUCCESS"); + 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::stub(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(); +} diff --git a/smart-house/src/main.rs b/smart-house/src/main.rs index c81b8ad..f328e4d 100644 --- a/smart-house/src/main.rs +++ b/smart-house/src/main.rs @@ -1,145 +1 @@ -use smart_house::{Device, House, PowerSocket, PrintStatus, Room, Thermometer, room}; - -fn main() { - 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(), - room!( - "PSocA" => PowerSocket::stub(9.5, true), - "ThermA" => Thermometer::new(20.1), - ), - ), - ( - "Main".to_string(), - room!( - "PSocB" => PowerSocket::stub(11.2, true), - "ThermB" => Thermometer::new(24.5), - "PSocC" => PowerSocket::stub(10.4, true), - ), - ), - ( - "Bedroom".to_string(), - room!( - "ThermC" => Thermometer::new(19.3), - "PSocD" => PowerSocket::stub(12.1, true), - ), - ), - ] - .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!"); - return; - }; - power_socket.set_on(false); - println!("SUCCESS"); - 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::stub(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(); -} +fn main() {}