#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum PrinterState {
Idle,
Processing,
Stopped,
Unknown,
}
impl PrinterState {
pub fn from_cups_state(state: &str) -> Self {
match state {
"3" => PrinterState::Idle,
"4" => PrinterState::Processing,
"5" => PrinterState::Stopped,
_ => PrinterState::Unknown,
}
}
pub fn is_available(&self) -> bool {
matches!(self, PrinterState::Idle | PrinterState::Processing)
}
pub fn to_cups_value(&self) -> &'static str {
match self {
PrinterState::Idle => "3",
PrinterState::Processing => "4",
PrinterState::Stopped => "5",
PrinterState::Unknown => "0",
}
}
}
impl std::fmt::Display for PrinterState {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
PrinterState::Idle => write!(f, "Idle"),
PrinterState::Processing => write!(f, "Processing"),
PrinterState::Stopped => write!(f, "Stopped"),
PrinterState::Unknown => write!(f, "Unknown"),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_printer_state_from_cups_state() {
assert_eq!(PrinterState::from_cups_state("3"), PrinterState::Idle);
assert_eq!(PrinterState::from_cups_state("4"), PrinterState::Processing);
assert_eq!(PrinterState::from_cups_state("5"), PrinterState::Stopped);
assert_eq!(PrinterState::from_cups_state("unknown"), PrinterState::Unknown);
}
#[test]
fn test_printer_state_availability() {
assert!(PrinterState::Idle.is_available());
assert!(PrinterState::Processing.is_available());
assert!(!PrinterState::Stopped.is_available());
assert!(!PrinterState::Unknown.is_available());
}
#[test]
fn test_printer_state_display() {
assert_eq!(PrinterState::Idle.to_string(), "Idle");
assert_eq!(PrinterState::Processing.to_string(), "Processing");
assert_eq!(PrinterState::Stopped.to_string(), "Stopped");
assert_eq!(PrinterState::Unknown.to_string(), "Unknown");
}
#[test]
fn test_printer_state_cups_values() {
assert_eq!(PrinterState::Idle.to_cups_value(), "3");
assert_eq!(PrinterState::Processing.to_cups_value(), "4");
assert_eq!(PrinterState::Stopped.to_cups_value(), "5");
assert_eq!(PrinterState::Unknown.to_cups_value(), "0");
}
}