use crate::shared::interface::PlatformPrinterGetters;
#[derive(Debug, Clone)]
pub enum PrinterState {
READY,
PAUSED,
PRINTING,
UNKNOWN,
}
pub struct Printer {
pub name: String,
pub system_name: String,
pub driver_name: String,
pub uri: String,
pub location: String,
pub is_default: bool,
pub is_shared: bool,
pub state: PrinterState,
}
impl std::fmt::Debug for Printer {
fn fmt(&self, fmt: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(
fmt,
"Printer {{
\r name: {:?},
\r state: {:?},
\r system_name: {:?},
\r is_default: {:?},
\r uri: {:?},
\r is_shared: {:?},
\r location: {:?},
\r driver_name: {:?}
\r}}",
self.name,
self.state,
self.system_name,
self.is_default,
self.uri,
self.is_shared,
self.location,
self.driver_name
)
}
}
impl Clone for Printer {
fn clone(&self) -> Printer {
return Printer {
name: self.name.clone(),
state: self.state.clone(),
uri: self.uri.clone(),
location: self.location.clone(),
is_default: self.is_default.clone(),
system_name: self.system_name.clone(),
driver_name: self.driver_name.clone(),
is_shared: self.is_shared.clone(),
};
}
}
impl Printer {
pub fn from_platform_printer_getters(platform_printer: & dyn PlatformPrinterGetters, state: PrinterState) -> Printer {
let printer = Printer {
name: platform_printer.get_name(),
system_name: platform_printer.get_system_name(),
driver_name: platform_printer.get_marker_and_model(),
location: platform_printer.get_location(),
state,
uri: platform_printer.get_uri(),
is_default: platform_printer.get_is_default(),
is_shared: platform_printer.get_is_shared(),
};
return printer;
}
pub fn print(&self, buffer: &[u8], job_name: Option<&str>) -> Result<bool, String> {
return crate::print(&self.system_name, buffer, job_name);
}
pub fn print_file(&self, file_path: &str, job_name: Option<&str>) -> Result<bool, String> {
return crate::print_file(&self.system_name, file_path, job_name);
}
}