homework: extract print_status into a separate trait
This commit is contained in:
@@ -89,7 +89,7 @@
|
|||||||
соответствующими ключами.
|
соответствующими ключами.
|
||||||
|
|
||||||
Доработать формирование отчёта:
|
Доработать формирование отчёта:
|
||||||
- [ ] Вынести метод формирования отчёта в трейт и реализовать его на всех типах, которые возвращают отчёт: умное устройство,
|
- [x] Вынести метод формирования отчёта в трейт и реализовать его на всех типах, которые возвращают отчёт: умное устройство,
|
||||||
комната, дом.
|
комната, дом.
|
||||||
|
|
||||||
Привести тесты в соответствие с новым функционалом.
|
Привести тесты в соответствие с новым функционалом.
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
use crate::PrintStatus;
|
||||||
use std::fmt::Display;
|
use std::fmt::Display;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
@@ -17,10 +18,6 @@ impl Device {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn print_status(&self) {
|
|
||||||
println!("{}", self.display());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<super::Thermometer> for Device {
|
impl From<super::Thermometer> for Device {
|
||||||
@@ -35,6 +32,12 @@ impl From<super::PowerSocket> for Device {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl PrintStatus for Device {
|
||||||
|
fn print_status(&self) {
|
||||||
|
println!("{}", self.display());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
use crate::{Device, Error, Room};
|
use crate::{Device, Error, PrintStatus, Room};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
@@ -36,8 +36,10 @@ impl House {
|
|||||||
};
|
};
|
||||||
Ok(device)
|
Ok(device)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn print_status(&self) {
|
impl PrintStatus for House {
|
||||||
|
fn print_status(&self) {
|
||||||
for (room_name, room) in self.rooms.iter() {
|
for (room_name, room) in self.rooms.iter() {
|
||||||
println!("{}:", room_name);
|
println!("{}:", room_name);
|
||||||
println!("{}", "-".repeat(32));
|
println!("{}", "-".repeat(32));
|
||||||
|
|||||||
@@ -4,11 +4,13 @@ mod house;
|
|||||||
mod power_socket;
|
mod power_socket;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
mod room;
|
mod room;
|
||||||
|
mod print_status;
|
||||||
mod thermometer;
|
mod thermometer;
|
||||||
|
|
||||||
pub use device::Device;
|
pub use device::Device;
|
||||||
pub use error::Error;
|
pub use error::Error;
|
||||||
pub use house::House;
|
pub use house::House;
|
||||||
pub use power_socket::PowerSocket;
|
pub use power_socket::PowerSocket;
|
||||||
|
pub use print_status::PrintStatus;
|
||||||
pub use room::Room;
|
pub use room::Room;
|
||||||
pub use thermometer::Thermometer;
|
pub use thermometer::Thermometer;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
use smart_house::{Device, House, PowerSocket, Room, Thermometer, room};
|
use smart_house::{Device, House, PowerSocket, PrintStatus, Room, Thermometer, room};
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let mut house = House::new(
|
let mut house = House::new(
|
||||||
|
|||||||
3
smart-house/src/print_status.rs
Normal file
3
smart-house/src/print_status.rs
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
pub trait PrintStatus {
|
||||||
|
fn print_status(&self);
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
use crate::Device;
|
use crate::{Device, PrintStatus};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
@@ -26,8 +26,10 @@ impl Room {
|
|||||||
pub fn remove_device(&mut self, name: &str) -> Option<Device> {
|
pub fn remove_device(&mut self, name: &str) -> Option<Device> {
|
||||||
self.devices.remove(name)
|
self.devices.remove(name)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn print_status(&self) {
|
impl PrintStatus for Room {
|
||||||
|
fn print_status(&self) {
|
||||||
for (name, device) in self.devices.iter() {
|
for (name, device) in self.devices.iter() {
|
||||||
print!("{} => ", name);
|
print!("{} => ", name);
|
||||||
device.print_status();
|
device.print_status();
|
||||||
|
|||||||
Reference in New Issue
Block a user