From 6f8f9bd75db9413e3cf02338e5116478df0888f9 Mon Sep 17 00:00:00 2001 From: noyez Date: Fri, 21 Aug 2020 02:42:11 -0400 Subject: [PATCH] Change closure from Fn to FnMut. (#5) * Using FnMut, so works * Using FnMut for watch() and reopen_if_log_rotated() * adding fn to force reopen * adding actions to closure Co-authored-by: noyez Co-authored-by: noyez Co-authored-by: Bradley Noyes --- Cargo.toml | 2 +- src/lib.rs | 23 ++++++++++++++++++----- src/main.rs | 5 +++-- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 2743d0c..731252a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "logwatcher" -version = "0.1.0" +version = "0.1.1" authors = ["Aravinda VK "] description = "A lib to watch log files for new Changes, just like tail -f" diff --git a/src/lib.rs b/src/lib.rs index 8637090..3833a7e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -8,6 +8,11 @@ use std::os::unix::fs::MetadataExt; use std::thread::sleep; use std::time::Duration; +pub enum LogWatcherAction{ + None, + SeekToEnd, +} + pub struct LogWatcher { filename: String, inode: u64, @@ -40,9 +45,9 @@ impl LogWatcher { }) } - fn reopen_if_log_rotated(&mut self, callback: &F) + fn reopen_if_log_rotated(&mut self, callback: &mut F) where - F: Fn(String), + F: FnMut(String) -> LogWatcherAction, { loop { match File::open(self.filename.clone()) { @@ -78,9 +83,9 @@ impl LogWatcher { } } - pub fn watch(&mut self, callback: &F) + pub fn watch(&mut self, callback: &mut F) where - F: Fn(String), + F: FnMut(String) -> LogWatcherAction, { loop { let mut line = String::new(); @@ -90,7 +95,15 @@ impl LogWatcher { if len > 0 { self.pos += len as u64; self.reader.seek(SeekFrom::Start(self.pos)).unwrap(); - callback(line.replace("\n", "")); + match callback(line.replace("\n", "")) + { + LogWatcherAction::SeekToEnd => { + println!("SeekToEnd"); + self.reader.seek(SeekFrom::End(0)).unwrap(); + } + LogWatcherAction::None => { + } + } line.clear(); } else { if self.finish { diff --git a/src/main.rs b/src/main.rs index dfc085e..4f21eee 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,7 +2,7 @@ use std::env::args; use std::process::exit; extern crate logwatcher; -use logwatcher::LogWatcher; +use logwatcher::{LogWatcher, LogWatcherAction}; fn main() { let filename = match args().nth(1) { @@ -15,7 +15,8 @@ fn main() { let mut log_watcher = LogWatcher::register(filename).unwrap(); - log_watcher.watch(&|line: String| { + log_watcher.watch(&mut move |line: String| { println!("Line {}", line); + LogWatcherAction::None }); }