whereexpr 0.1.1

A fast, expressive rule-based filtering engine for Rust that evaluates boolean expressions over any data structure
Documentation
#[derive(Debug, PartialEq, Clone, Copy)]
pub(crate) enum TokenKind {
    And,
    Or,
    Not,
    LParen,
    RParen,
    ConditionIndex(u16),
}

#[derive(Debug, PartialEq, Clone, Copy, Default)]
pub(crate) struct TokenSpan {
    start: u16,
    end: u16,
}

impl TokenSpan {
    #[cfg(test)]
    pub(super) fn new(start: usize, end: usize) -> Self {
        Self {
            start: start as u16,
            end: end as u16,
        }
    }
    #[inline(always)]
    pub(crate) fn as_slice<'a>(&self, input: &'a str) -> &'a str {
        &input[self.start as usize..self.end as usize]
    }
    #[inline(always)]
    pub(crate) fn start(&self) -> usize {
        self.start as usize
    }
    #[inline(always)]
    pub(crate) fn end(&self) -> usize {
        self.end as usize
    }
}

#[derive(Debug, PartialEq, Clone, Copy)]
pub(crate) struct Token {
    kind: TokenKind,
    span: TokenSpan,
}

impl Token {
    pub(crate) fn new(kind: TokenKind, start: usize, end: usize) -> Self {
        Self {
            kind,
            span: TokenSpan {
                start: start as u16,
                end: end as u16,
            },
        }
    }
    pub(crate) fn kind(&self) -> TokenKind {
        self.kind
    }
    pub(crate) fn span(&self) -> TokenSpan {
        self.span
    }
}