sqlparser_mysql/base/
visible_type.rs1use 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#[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}