add Thermometer and PowerSocket structs and Device enum
This commit is contained in:
55
smart-house/src/device.rs
Normal file
55
smart-house/src/device.rs
Normal file
@@ -0,0 +1,55 @@
|
||||
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 ]");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user