From c08f460021e3deb75b8a57c940499e1556d13516 Mon Sep 17 00:00:00 2001 From: Kenan Sulayman Date: Fri, 4 Nov 2016 02:04:58 +0100 Subject: [PATCH] Use closures --- README.md | 12 ++++-------- src/lib.rs | 15 ++++++--------- src/main.rs | 11 +++++------ 3 files changed, 15 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index ffa3b54..997650a 100644 --- a/README.md +++ b/README.md @@ -22,14 +22,10 @@ Add to your code, extern crate logwatcher; use logwatcher::LogWatcher; -Create a callback function, which accepts String as input - - fn parse_line(line: String) { - println!("Line {}", line); - } - -Register the logwatcher and watch it! +Register the logwatcher, pass a closure and watch it! let mut log_watcher = LogWatcher::register("/var/log/check.log".to_string()).unwrap(); - log_watcher.watch(parse_line); + log_watcher.watch(&|line: String| { + println!("Line {}", line); + }); diff --git a/src/lib.rs b/src/lib.rs index 27ba77c..426349f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -22,13 +22,13 @@ impl LogWatcher { Ok(x) => x, Err(err) => return Err(err) }; - + let metadata = match f.metadata() { Ok(x) => x, Err(err) => return Err(err) }; - let mut reader = BufReader::new(f); + let mut reader = BufReader::new(f); let pos = metadata.len(); reader.seek(SeekFrom::Start(pos)).unwrap(); Ok(LogWatcher{filename: filename, @@ -38,7 +38,8 @@ impl LogWatcher { finish: false}) } - fn reopen_if_log_rotated(&mut self, callback: fn (line: String)){ + fn reopen_if_log_rotated(&mut self, callback: &F) + where F: Fn(String) { loop { match File::open(self.filename.clone()) { Ok(x) => { @@ -74,7 +75,8 @@ impl LogWatcher { } } - pub fn watch(&mut self, callback: fn (line: String)) { + pub fn watch(&mut self, callback: &F) + where F: Fn(String) { loop{ let mut line = String::new(); let resp = self.reader.read_line(&mut line); @@ -102,8 +104,3 @@ impl LogWatcher { } } } - - -#[test] -fn it_works() { -} diff --git a/src/main.rs b/src/main.rs index d3ba7bc..ca2a835 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,11 +4,6 @@ use std::process::exit; extern crate logwatcher; use logwatcher::LogWatcher; - -fn parse_line(line: String) { - println!("Line {}", line); -} - fn main(){ let filename = match args().nth(1) { Some(x) => x, @@ -17,6 +12,10 @@ fn main(){ exit(1); } }; + let mut log_watcher = LogWatcher::register(filename).unwrap(); - log_watcher.watch(parse_line); + + log_watcher.watch(&|line: String| { + println!("Line {}", line); + }); }