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
55
56
57
58
59
60
61
62
63
64
65
66
extern crate crossbeam;
use std::sync::{Arc};
use crossbeam::sync::ArcCell;
use std::time;
use std::fmt;
use std::marker::PhantomData;
use std::io::Write as IoWrite;
use std::fmt::Write as FmtWrite;
pub mod drain;
use drain::*;
pub mod logger;
pub use logger::Logger;
include!("_level.rs");
type DrainRef = Arc<ArcCell<Box<Drain>>>;
type KeyValue = (String, String);
trait Formatter {
}
pub struct RecordInfo {
pub ts : time::SystemTime,
pub level : Level,
pub msg : String,
}
pub struct RecordBuilder<'a> {
record_drain: Option<Box<RecordDrain>>,
phantom: PhantomData<&'a Logger>
}
impl<'a> RecordBuilder<'a> {
pub fn add<'b, 'c, T : fmt::Display>(&'b mut self, key : &'b str, val : T) -> &'b mut Self {
match self.record_drain {
Some(ref mut drain) => drain.add(key, &val),
None => {}
}
self
}
}
impl<'a> Drop for RecordBuilder<'a> {
fn drop(&mut self) {
match self.record_drain.take() {
Some(mut drain) => drain.end(),
None => {}
}
}
}