homework: move old example to bin
This commit is contained in:
145
smart-house/src/bin/stubs_example.rs
Normal file
145
smart-house/src/bin/stubs_example.rs
Normal file
@@ -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();
|
||||||
|
}
|
||||||
@@ -1,145 +1 @@
|
|||||||
use smart_house::{Device, House, PowerSocket, PrintStatus, Room, Thermometer, room};
|
fn main() {}
|
||||||
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user