sqlparser_mysql/base/
visible_type.rs

1use nom::branch::alt;
2use nom::bytes::complete::tag_no_case;
3use nom::combinator::map;
4use nom::IResult;
5use std::fmt::{write, Display, Formatter};
6
7use base::ParseSQLError;
8
9/// {VISIBLE | INVISIBLE}
10#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
11pub enum VisibleType {
12    Visible,
13    Invisible,
14}
15
16impl Display for VisibleType {
17    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
18        match *self {
19            VisibleType::Visible => write!(f, "VISIBLE"),
20            VisibleType::Invisible => write!(f, "INVISIBLE"),
21        }
22    }
23}
24
25impl VisibleType {
26    pub fn parse(i: &str) -> IResult<&str, VisibleType, ParseSQLError<&str>> {
27        alt((
28            map(tag_no_case("VISIBLE"), |_| VisibleType::Visible),
29            map(tag_no_case("INVISIBLE"), |_| VisibleType::Invisible),
30        ))(i)
31    }
32}
33
34#[cfg(test)]
35mod tests {
36    use base::visible_type::VisibleType;
37
38    #[test]
39    fn parse_algorithm_type() {
40        let str1 = "visible";
41        let res1 = VisibleType::parse(str1);
42        assert!(res1.is_ok());
43        assert_eq!(res1.unwrap().1, VisibleType::Visible);
44
45        let str2 = "invisible";
46        let res2 = VisibleType::parse(str2);
47        assert!(res2.is_ok());
48        assert_eq!(res2.unwrap().1, VisibleType::Invisible);
49    }
50}