introduce TaskState trait
Used to not require access to the WorkerTask struct outside the `server` and `api2` module, so it'll be easier to separate those backup/server/client parts into separate crates. Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
This commit is contained in:
parent
adfcfb6788
commit
d1993187b6
|
@ -1,3 +1,5 @@
|
||||||
|
pub mod task;
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
pub mod buildcfg;
|
pub mod buildcfg;
|
||||||
|
|
||||||
|
|
|
@ -851,3 +851,19 @@ impl WorkerTask {
|
||||||
&self.upid
|
&self.upid
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl crate::task::TaskState for WorkerTask {
|
||||||
|
fn check_abort(&self) -> Result<(), Error> {
|
||||||
|
self.fail_on_abort()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn log(&self, level: log::Level, message: &std::fmt::Arguments) {
|
||||||
|
match level {
|
||||||
|
log::Level::Error => self.warn(&message.to_string()),
|
||||||
|
log::Level::Warn => self.warn(&message.to_string()),
|
||||||
|
log::Level::Info => self.log(&message.to_string()),
|
||||||
|
log::Level::Debug => self.log(&format!("DEBUG: {}", message)),
|
||||||
|
log::Level::Trace => self.log(&format!("TRACE: {}", message)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
use anyhow::Error;
|
||||||
|
|
||||||
|
/// `WorkerTask` methods commonly used from contexts otherwise not related to the API server.
|
||||||
|
pub trait TaskState {
|
||||||
|
/// If the task should be aborted, this should fail with a reasonable error message.
|
||||||
|
fn check_abort(&self) -> Result<(), Error>;
|
||||||
|
|
||||||
|
/// Create a log message for this task.
|
||||||
|
fn log(&self, level: log::Level, message: &std::fmt::Arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Convenience implementation:
|
||||||
|
impl<T: TaskState + ?Sized> TaskState for std::sync::Arc<T> {
|
||||||
|
fn check_abort(&self) -> Result<(), Error> {
|
||||||
|
<T as TaskState>::check_abort(&*self)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn log(&self, level: log::Level, message: &std::fmt::Arguments) {
|
||||||
|
<T as TaskState>::log(&*self, level, message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! task_error {
|
||||||
|
($task:expr, $($fmt:tt)+) => {{
|
||||||
|
$crate::task::TaskState::log(&*$task, log::Level::Error, &format_args!($($fmt)+))
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! task_warn {
|
||||||
|
($task:expr, $($fmt:tt)+) => {{
|
||||||
|
$crate::task::TaskState::log(&*$task, log::Level::Warn, &format_args!($($fmt)+))
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! task_log {
|
||||||
|
($task:expr, $($fmt:tt)+) => {{
|
||||||
|
$crate::task::TaskState::log(&*$task, log::Level::Info, &format_args!($($fmt)+))
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! task_debug {
|
||||||
|
($task:expr, $($fmt:tt)+) => {{
|
||||||
|
$crate::task::TaskState::log(&*$task, log::Level::Debug, &format_args!($($fmt)+))
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! task_trace {
|
||||||
|
($task:expr, $($fmt:tt)+) => {{
|
||||||
|
$crate::task::TaskState::log(&*$task, log::Level::Trace, &format_args!($($fmt)+))
|
||||||
|
}};
|
||||||
|
}
|
Loading…
Reference in New Issue