stalker/
events.rs

1use std::path::PathBuf;
2use std::sync::mpsc::{channel, Receiver, Sender};
3
4#[derive(Debug)]
5pub enum FSeventType {
6    Created,
7    Modified,
8    Deleted,
9    Stabilized,
10}
11
12pub struct FSEvent {
13    pub event_type: FSeventType,
14    pub path: PathBuf,
15}
16
17impl FSEvent {
18    pub fn created(path: PathBuf) -> FSEvent {
19        FSEvent {
20            event_type: FSeventType::Created,
21            path: path,
22        }
23    }
24    pub fn modified(path: PathBuf) -> FSEvent {
25        FSEvent {
26            event_type: FSeventType::Modified,
27            path: path,
28        }
29    }
30    pub fn deleted(path: PathBuf) -> FSEvent {
31        FSEvent {
32            event_type: FSeventType::Deleted,
33            path: path,
34        }
35    }
36    pub fn stabilized(path: PathBuf) -> FSEvent {
37        FSEvent {
38            event_type: FSeventType::Stabilized,
39            path: path,
40        }
41    }
42}
43
44pub struct FSEventEmitter {
45    pub sender: Sender<FSEvent>,
46    receiver: Receiver<FSEvent>,
47}
48
49impl FSEventEmitter {
50    pub fn new() -> FSEventEmitter {
51        let (tx, rx) = channel();
52        return FSEventEmitter {
53            sender: tx,
54            receiver: rx,
55        };
56    }
57    pub fn listen_sync(&self, callback: fn(FSEvent) -> ()) {
58        loop {
59            let event = self.receiver.recv().unwrap();
60            callback(event)
61        }
62    }
63}