Files
rust-otus/smart-house/src/device.rs

56 lines
1.6 KiB
Rust

use std::fmt::Display;
pub enum Device {
Thermometer(super::Thermometer),
PowerSocket(super::PowerSocket),
}
impl Device {
pub fn display(&self) -> impl Display {
match self {
Device::Thermometer(thermometer) => {
format!("DEV:{}", thermometer.display())
}
Device::PowerSocket(power_socket) => {
format!("DEV:{}", power_socket.display())
}
}
}
pub fn print_status(&self) {
println!("{}", self.display());
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::{PowerSocket, Thermometer};
#[test]
fn smoke_test() {
let dev_thermometer = Device::Thermometer(Thermometer::new(20.1));
let dev_power_socket = Device::PowerSocket(PowerSocket::new(11.2, false));
dev_thermometer.print_status();
dev_power_socket.print_status();
let Device::Thermometer(thermometer) = dev_thermometer else { unreachable!() };
let Device::PowerSocket(power_socket) = dev_power_socket else {
unreachable!()
};
assert_eq!(format!("{}", thermometer.display()), "Thermometer[ 20.1 ]");
assert_eq!(format!("{}", power_socket.display()), "PowerSocket[ OFF : 0.0 ]");
}
#[test]
fn display_test() {
let dev_thermometer = Device::Thermometer(Thermometer::new(20.1));
let dev_power_socket = Device::PowerSocket(PowerSocket::new(11.2, false));
assert_eq!(format!("{}", dev_thermometer.display()), "DEV:Thermometer[ 20.1 ]");
assert_eq!(format!("{}", dev_power_socket.display()), "DEV:PowerSocket[ OFF : 0.0 ]");
}
}