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}