Skip to main content

litcheck_filecheck/ast/
modifier.rs

1use std::str::FromStr;
2
3use crate::common::*;
4
5#[derive(Debug)]
6pub struct InvalidCheckModifierError;
7
8bitflags::bitflags! {
9    /// Represents modificatons to the behavior of a [Check]
10    #[derive(Copy, Clone)]
11    pub struct CheckModifier: u16 {
12        const LITERAL = 1;
13    }
14}
15impl Default for CheckModifier {
16    fn default() -> Self {
17        Self::empty()
18    }
19}
20impl FromStr for CheckModifier {
21    type Err = InvalidCheckModifierError;
22
23    fn from_str(s: &str) -> Result<Self, Self::Err> {
24        match s {
25            "LITERAL" | "literal" => Ok(Self::LITERAL),
26            _ => Err(InvalidCheckModifierError),
27        }
28    }
29}
30impl fmt::Debug for CheckModifier {
31    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
32        use std::fmt::Write;
33        f.write_str("CheckModifier(")?;
34        if self.contains(Self::LITERAL) {
35            f.write_str("LITERAL")?;
36        }
37        f.write_char(')')
38    }
39}
40impl CheckModifier {
41    pub fn is_literal(&self) -> bool {
42        self.contains(Self::LITERAL)
43    }
44}
45impl Eq for CheckModifier {}
46impl PartialEq for CheckModifier {
47    fn eq(&self, other: &Self) -> bool {
48        self.is_literal() == other.is_literal()
49    }
50}