1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
extern crate slog;
extern crate notify_rust;
use notify_rust::Notification;
use notify_rust::hints::NotificationHint;
pub struct Notify{
name: &'static str
}
impl slog::Drain for Notify{
type Err = String;
type Ok = ();
fn log(&self, info: &slog::Record, _: &slog::OwnedKVList) -> Result<Self::Ok, Self::Err>{
let summary = format!("{:?} {}@{}:{}", info.level(), info.file(), info.line(), info.column());
let body = format!("{}", info.msg());
let mut notification = Notification::new();
notification
.appname(self.name)
.summary(&summary)
.body(&body);
if info.level().is_at_least(slog::Level::Warning){
notification.hint(NotificationHint::Resident(true));
}
notification
.show()
.unwrap();
Ok(())
}
}
pub fn simple(name: &'static str) -> Notify {
Notify{
name: name
}
}