76 lines
2.1 KiB
Rust
76 lines
2.1 KiB
Rust
use std::fmt::Display;
|
|
|
|
#[derive(Debug)]
|
|
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());
|
|
}
|
|
|
|
pub fn get_name(&self) -> &str {
|
|
match self {
|
|
Device::Thermometer(thermometer) => thermometer.get_name(),
|
|
Device::PowerSocket(power_socket) => power_socket.get_name(),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl From<super::Thermometer> for Device {
|
|
fn from(value: super::Thermometer) -> Self {
|
|
Device::Thermometer(value)
|
|
}
|
|
}
|
|
|
|
impl From<super::PowerSocket> for Device {
|
|
fn from(value: super::PowerSocket) -> Self {
|
|
Device::PowerSocket(value)
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
use crate::{PowerSocket, Thermometer};
|
|
|
|
#[test]
|
|
fn smoke_test() {
|
|
let dev_thermometer = Device::Thermometer(Thermometer::new("Therm", 20.1));
|
|
let dev_power_socket = Device::PowerSocket(PowerSocket::new("PSoc", 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()), "Therm[ 20.1 ]");
|
|
assert_eq!(format!("{}", power_socket.display()), "PSoc[ OFF : 0.0 ]");
|
|
}
|
|
|
|
#[test]
|
|
fn display_test() {
|
|
let dev_thermometer = Device::Thermometer(Thermometer::new("Therm", 20.1));
|
|
let dev_power_socket = Device::PowerSocket(PowerSocket::new("PSoc", 11.2, false));
|
|
|
|
assert_eq!(format!("{}", dev_thermometer.display()), "DEV:Therm[ 20.1 ]");
|
|
assert_eq!(format!("{}", dev_power_socket.display()), "DEV:PSoc[ OFF : 0.0 ]");
|
|
}
|
|
}
|