use crate::matchers::Matcher;
use pulldown_cmark::Event;
#[derive(Debug, Clone, PartialEq)]
pub struct FallingEdge<M> {
inner: M,
previous_was_matched: bool,
}
impl<M> FallingEdge<M> {
pub const fn new(inner: M) -> Self {
FallingEdge {
inner,
previous_was_matched: false,
}
}
}
impl<M: Matcher> Matcher for FallingEdge<M> {
fn matches_event(&mut self, event: &Event<'_>) -> bool {
let current_is_matched = self.inner.matches_event(event);
let is_falling_edge = self.previous_was_matched && !current_is_matched;
self.previous_was_matched = current_is_matched;
is_falling_edge
}
}