use std::sync::Arc;
#[derive(Debug, Clone, PartialEq, Eq)]
#[non_exhaustive]
pub enum Progress {
ProofOfWork {
label: String,
difficulty: u8,
},
Deleted {
path: String,
},
Relinked {
path: String,
parent: String,
},
RekeyPlanned {
path: String,
nodes: usize,
tokens: usize,
kit: String,
},
RekeyStep {
path: String,
step: &'static str,
},
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[non_exhaustive]
pub enum Warning {
KeepAliveFailed {
path: String,
message: String,
},
Unreachable {
path: String,
message: String,
vault_missing: bool,
},
ChildTooDeep {
parent: String,
message: String,
},
SealedKeyUnopenable {
path: String,
message: String,
},
RelinkFailed {
path: String,
parent: String,
message: String,
},
Detached {
path: String,
parent: String,
},
ForwardOnlyRevocation {
path: String,
token: String,
scope: String,
held: String,
},
}
pub trait Events: Send + Sync {
fn progress(&self, event: &Progress) {
let _ = event;
}
fn expiry(&self, label: &str, expires_at: i64) {
let _ = (label, expires_at);
}
fn warning(&self, warning: &Warning) {
let _ = warning;
}
}
#[derive(Debug, Clone, Copy, Default)]
pub struct NoEvents;
impl Events for NoEvents {}
impl<E: Events + ?Sized> Events for Arc<E> {
fn progress(&self, event: &Progress) {
(**self).progress(event);
}
fn expiry(&self, label: &str, expires_at: i64) {
(**self).expiry(label, expires_at);
}
fn warning(&self, warning: &Warning) {
(**self).warning(warning);
}
}