litcheck_filecheck/ast/
modifier.rs1use std::str::FromStr;
2
3use crate::common::*;
4
5#[derive(Debug)]
6pub struct InvalidCheckModifierError;
7
8bitflags::bitflags! {
9 #[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}