diff --git a/src/filter_plugin/skip.rs b/src/filter_plugin/skip.rs index bd014c6..783118f 100644 --- a/src/filter_plugin/skip.rs +++ b/src/filter_plugin/skip.rs @@ -12,6 +12,27 @@ impl SkipBytesFilter { remaining: count, } } + + pub fn create(options: Option) -> Result> { + let options = options.ok_or_else(|| { + std::io::Error::new( + std::io::ErrorKind::InvalidInput, + "skip_bytes filter requires options" + ) + })?; + + let count = options.get("n") + .and_then(|v| v.as_u64()) + .map(|n| n as usize) + .ok_or_else(|| { + std::io::Error::new( + std::io::ErrorKind::InvalidInput, + "skip_bytes filter requires 'n' parameter" + ) + })?; + + Ok(Box::new(Self::new(count))) + } } impl FilterPlugin for SkipBytesFilter { @@ -45,6 +66,27 @@ impl SkipLinesFilter { remaining: count, } } + + pub fn create(options: Option) -> Result> { + let options = options.ok_or_else(|| { + std::io::Error::new( + std::io::ErrorKind::InvalidInput, + "skip_lines filter requires options" + ) + })?; + + let count = options.get("n") + .and_then(|v| v.as_u64()) + .map(|n| n as usize) + .ok_or_else(|| { + std::io::Error::new( + std::io::ErrorKind::InvalidInput, + "skip_lines filter requires 'n' parameter" + ) + })?; + + Ok(Box::new(Self::new(count))) + } } impl FilterPlugin for SkipLinesFilter { diff --git a/src/filter_plugin/tail.rs b/src/filter_plugin/tail.rs index 5b02a8b..b80a854 100644 --- a/src/filter_plugin/tail.rs +++ b/src/filter_plugin/tail.rs @@ -15,6 +15,27 @@ impl TailBytesFilter { count, } } + + pub fn create(options: Option) -> Result> { + let options = options.ok_or_else(|| { + std::io::Error::new( + std::io::ErrorKind::InvalidInput, + "tail_bytes filter requires options" + ) + })?; + + let count = options.get("n") + .and_then(|v| v.as_u64()) + .map(|n| n as usize) + .ok_or_else(|| { + std::io::Error::new( + std::io::ErrorKind::InvalidInput, + "tail_bytes filter requires 'n' parameter" + ) + })?; + + Ok(Box::new(Self::new(count))) + } } impl FilterPlugin for TailBytesFilter { @@ -54,6 +75,27 @@ impl TailLinesFilter { count, } } + + pub fn create(options: Option) -> Result> { + let options = options.ok_or_else(|| { + std::io::Error::new( + std::io::ErrorKind::InvalidInput, + "tail_lines filter requires options" + ) + })?; + + let count = options.get("n") + .and_then(|v| v.as_u64()) + .map(|n| n as usize) + .ok_or_else(|| { + std::io::Error::new( + std::io::ErrorKind::InvalidInput, + "tail_lines filter requires 'n' parameter" + ) + })?; + + Ok(Box::new(Self::new(count))) + } } impl FilterPlugin for TailLinesFilter {