pub struct SequenceWatcher<T>{ /* private fields */ }
Expand description
Monitors a stream of data for a sequence.
§Examples
use seq_watcher::SequenceWatcher;
const CTRL_C: u8 = 3;
// Watch the input stream for two consecutive <CTRL-C> characters.
let watcher = SequenceWatcher::new(&[CTRL_C, CTRL_C]);
for b in b'a'..=b'z' {
assert_eq!(false, watcher.check(&b)); // Send single ASCII byte
assert_eq!(false, watcher.check(&CTRL_C)); // Send single <Ctrl-C>
}
assert_eq!(true, watcher.check(&CTRL_C)); // Send a second <Ctrl-C>
Implementations§
Source§impl<T: PartialEq + Clone + Debug> SequenceWatcher<T>
impl<T: PartialEq + Clone + Debug> SequenceWatcher<T>
Sourcepub fn new(seq: &[T]) -> Self
pub fn new(seq: &[T]) -> Self
Create a new SequenceWatcher from a slice of data. The data type can be anything with PartialEq, Debug, and Clone traits.
Internally, the SequenceWatcher structure contains a vector of the sequence it monitors and an index indicating where in the sequence it is expecting next.
§Examples
let watcher = SequenceWatcher::new(&['q', 'u', 'i', 't']);
assert_eq!(false, watcher.check(&'q'));
assert_eq!(false, watcher.check(&'u'));
assert_eq!(false, watcher.check(&'i'));
assert_eq!(true, watcher.check(&'t'));
§Panics
SequenceWatcher::new
will panic if the sequence slice is empty.
Sourcepub fn check(&self, value: &T) -> bool
pub fn check(&self, value: &T) -> bool
Tells the SequenceWatcher of a new input item and checks to see if a sequence has been completed. Returns true when the sequence is completed.
§Examples
let watcher = SequenceWatcher::new(&[Some("found")]);
assert_eq!(false, watcher.check(&None));
assert_eq!(false, watcher.check(&Some("something")));
assert_eq!(false, watcher.check(&Some("anything")));
assert_eq!(true, watcher.check(&Some("found")));
Sourcepub fn expects(&self) -> &T
pub fn expects(&self) -> &T
Returns the a reference to the data value that the SequenceWatcher is expecting next.
§Examples
let watcher = SequenceWatcher::new(&[1, 2]);
assert_eq!(1, *watcher.expects());
assert_eq!(false, watcher.check(&0));
assert_eq!(1, *watcher.expects());
assert_eq!(false, watcher.check(&1));
assert_eq!(2, *watcher.expects());
assert_eq!(true, watcher.check(&2));
assert_eq!(1, *watcher.expects());
Sourcepub fn index(&self) -> usize
pub fn index(&self) -> usize
Returns the index in the sequence that the SequenceWatcher is expecting next. The index will never be greater than or equal to the sequence length.
§Examples
let watcher = SequenceWatcher::new(&[1, 2]);
assert_eq!(0, watcher.index());
assert_eq!(false, watcher.check(&0));
assert_eq!(0, watcher.index());
assert_eq!(false, watcher.check(&1));
assert_eq!(1, watcher.index());
assert_eq!(true, watcher.check(&2));
assert_eq!(0, watcher.index());
Sourcepub fn reset(&self)
pub fn reset(&self)
Resets the SequenceWatcher so it doesn’t remember if it has seen any protions of the sequence.
§Examples
let watcher = SequenceWatcher::new(&[1, 2]);
assert_eq!(false, watcher.check(&1));
assert_eq!(1, watcher.index());
watcher.reset();
assert_eq!(false, watcher.check(&2));
assert_eq!(false, watcher.check(&1));
assert_eq!(true, watcher.check(&2));
Trait Implementations§
Source§impl<T> Clone for SequenceWatcher<T>
impl<T> Clone for SequenceWatcher<T>
Source§fn clone(&self) -> SequenceWatcher<T>
fn clone(&self) -> SequenceWatcher<T>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<T> Debug for SequenceWatcher<T>
impl<T> Debug for SequenceWatcher<T>
Source§impl<T: PartialEq + Debug + Clone> From<&[T]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T]> for SequenceWatcher<T>
Creates a new SequenceWatcher from a slice.
§Examples
let watcher = SequenceWatcher::from(&[b'X'][..]); // This is treated as a slice.
assert_eq!(true, watcher.check(&b'X'));
This also works for array references for arrays of up to 32 itmes.
let watcher = SequenceWatcher::from(&[b'X']); // This is treated as an array reference.
assert_eq!(true, watcher.check(&b'X'));
There is no support for a zero length array reference, so when using the array version, it will fail to compile.
let watcher: SequenceWatcher<u8> = SequenceWatcher::from(&[]);
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 1]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 1]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 10]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 10]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 11]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 11]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 12]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 12]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 13]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 13]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 14]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 14]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 15]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 15]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 16]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 16]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 17]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 17]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 18]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 18]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 19]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 19]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 2]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 2]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 20]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 20]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 21]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 21]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 22]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 22]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 23]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 23]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 24]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 24]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 25]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 25]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 26]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 26]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 27]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 27]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 28]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 28]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 29]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 29]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 3]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 3]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 30]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 30]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 31]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 31]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 32]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 32]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 4]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 4]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 5]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 5]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 6]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 6]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 7]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 7]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 8]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 8]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.
Source§impl<T: PartialEq + Debug + Clone> From<&[T; 9]> for SequenceWatcher<T>
impl<T: PartialEq + Debug + Clone> From<&[T; 9]> for SequenceWatcher<T>
Creates a new SequenceWatcher from an array.