use std::sync::Arc;
use std::sync::Mutex;
use std::sync::mpsc::Sender;
use crate::mincore::DefaultPageMap;
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Event<PM = DefaultPageMap> {
FileStart {
path: Arc<str>,
total_pages: usize,
residency: PM,
},
FileProgress {
path: Arc<str>,
page_offset: usize,
pages_walked: usize,
resident: bool,
},
FileDone {
path: Arc<str>,
},
AllDone,
}
pub struct EventSink<PM>(Mutex<Sender<Event<PM>>>);
impl<PM> EventSink<PM> {
pub fn new(sender: Sender<Event<PM>>) -> Self {
Self(Mutex::new(sender))
}
pub fn send(&self, event: Event<PM>) {
let _ = self.0.lock().unwrap().send(event);
}
}