1use std::sync::Mutex;
4use std::sync::mpsc::Sender;
5
6use crate::mincore::DefaultPageMap;
7
8#[derive(Debug, Clone, PartialEq)]
9#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
10pub enum Event<PM = DefaultPageMap> {
11 FileStart {
13 path: String,
14 total_pages: usize,
15 residency: PM,
16 },
17 FileProgress {
19 path: String,
20 page_offset: usize,
21 pages_walked: usize,
22 resident: bool,
23 },
24 FileDone {
26 path: String,
27 },
28 AllDone,
29}
30
31pub struct EventSink<PM>(Mutex<Sender<Event<PM>>>);
33
34impl<PM> EventSink<PM> {
35 pub fn new(sender: Sender<Event<PM>>) -> Self {
36 Self(Mutex::new(sender))
37 }
38
39 pub fn send(&self, event: Event<PM>) {
40 let _ = self.0.lock().unwrap().send(event);
41 }
42}