sqlparser_mysql/base/
tablespace_type.rs1use nom::branch::alt;
2use nom::bytes::complete::tag_no_case;
3use nom::character::complete::multispace0;
4use nom::combinator::map;
5use nom::sequence::tuple;
6use nom::IResult;
7use std::fmt::{write, Display, Formatter};
8
9use base::ParseSQLError;
10
11#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
13pub enum TablespaceType {
14 StorageDisk,
15 StorageMemory,
16}
17
18impl Display for TablespaceType {
19 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
20 match *self {
21 TablespaceType::StorageDisk => write!(f, "STORAGE DISK"),
22 TablespaceType::StorageMemory => write!(f, "STORAGE MEMORY"),
23 }
24 }
25}
26
27impl TablespaceType {
28 pub fn parse(i: &str) -> IResult<&str, TablespaceType, ParseSQLError<&str>> {
29 map(
30 tuple((
31 tag_no_case("STORAGE"),
32 multispace0,
33 alt((
34 map(tag_no_case("DISK"), |_| TablespaceType::StorageDisk),
35 map(tag_no_case("MEMORY"), |_| TablespaceType::StorageMemory),
36 )),
37 )),
38 |(_, _, tablespace_type)| tablespace_type,
39 )(i)
40 }
41}
42
43#[cfg(test)]
44mod tests {
45 use base::algorithm_type::AlgorithmType;
46 use base::TablespaceType;
47
48 #[test]
49 fn parse_algorithm_type() {
50 let str1 = "STORAGE disk";
51 let res1 = TablespaceType::parse(str1);
52 assert!(res1.is_ok());
53 assert_eq!(res1.unwrap().1, TablespaceType::StorageDisk);
54
55 let str2 = "storage memory";
56 let res2 = TablespaceType::parse(str2);
57 assert!(res2.is_ok());
58 assert_eq!(res2.unwrap().1, TablespaceType::StorageMemory);
59 }
60}