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
use log4rs::file::{Deserialize, Deserializers};
use serde_value::Value;
use std::error::Error;
use trigger::{LogFile, Trigger};
use trigger::size::config::Config;
#[cfg_attr(rustfmt, rustfmt_skip)]
mod config;
#[derive(Debug)]
pub struct SizeTrigger {
limit: u64,
}
impl SizeTrigger {
pub fn new(limit: u64) -> SizeTrigger {
SizeTrigger { limit: limit }
}
}
impl Trigger for SizeTrigger {
fn trigger(&self, file: &LogFile) -> Result<bool, Box<Error>> {
Ok(file.len() > self.limit)
}
}
pub struct SizeTriggerDeserializer;
impl Deserialize for SizeTriggerDeserializer {
type Trait = Trigger;
fn deserialize(&self, config: Value, _: &Deserializers) -> Result<Box<Trigger>, Box<Error>> {
let config: Config = try!(config.deserialize_into());
Ok(Box::new(SizeTrigger::new(config.limit)))
}
}