1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
use super::trace_u;
use super::Neu;

use crate::MayDebug;

#[derive(Debug, Clone, Default, Copy)]
pub struct Equal<T> {
    val: T,
}

impl<T> Equal<T> {
    pub fn new(val: T) -> Self {
        Self { val }
    }
}

impl<T: PartialEq + MayDebug> Neu<T> for Equal<T> {
    #[inline(always)]
    fn is_match(&self, other: &T) -> bool {
        trace_u!("equal", self.val, other, &self.val == other)
    }
}

///
/// Match a character equal to given value.
///
/// # Example
///
/// ```
/// use neure::prelude::*;
/// use neu::*;
///
/// fn main() -> Result<(), Box<dyn std::error::Error>> {
///     let letter = equal('A');
///     let letter = letter.repeat_times::<3>();
///     let mut ctx = CharsCtx::new("AAAabcd");
///
///     assert_eq!(ctx.try_mat(&letter)?, Span::new(0, 3));
///     assert!(ctx.try_mat(&letter).is_err());
///     Ok(())
/// }
/// ```
pub const fn equal<T: PartialEq + MayDebug>(val: T) -> Equal<T> {
    Equal { val }
}