use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::Arc;
#[derive(Clone, Debug)]
pub struct CancellationToken(Arc<AtomicBool>);
impl CancellationToken {
pub(crate) fn new() -> Self {
Self(Arc::new(AtomicBool::new(false)))
}
pub fn cancel(&self) {
self.0.store(true, Ordering::Relaxed);
}
pub fn is_cancelled(&self) -> bool {
self.0.load(Ordering::Relaxed)
}
}
#[derive(Default, Copy, Clone, Debug, PartialEq, Eq)]
pub enum OverwriteMode {
#[default]
Overwrite,
Skip,
Error,
Backup,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum ErrorAction {
Skip,
Abort,
}
pub type DirFilter = Box<dyn Fn(&str) -> bool + 'static>;
pub type DirErrorHandler = Box<dyn Fn(&str, &anyhow::Error) -> ErrorAction + 'static>;
pub(crate) type DirFilterRef = dyn Fn(&str) -> bool + 'static;
pub(crate) type DirErrorHandlerRef = dyn Fn(&str, &anyhow::Error) -> ErrorAction + 'static;