xref: /DADK/dadk-config/src/rootfs/fstype.rs (revision 1ad837a44976ed9fbcb8d70a0b0b47ea3286c5ed)
1 use serde::{Deserialize, Deserializer};
2 
3 #[derive(Debug, Clone, Copy, PartialEq, Eq)]
4 pub enum FsType {
5     Fat32,
6 }
7 
8 impl<'de> Deserialize<'de> for FsType {
9     fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
10     where
11         D: Deserializer<'de>,
12     {
13         let mut s = String::deserialize(deserializer)?;
14         s.make_ascii_lowercase();
15         match s.as_str() {
16             "fat32" => Ok(FsType::Fat32),
17             _ => Err(serde::de::Error::custom("invalid fs type")),
18         }
19     }
20 }
21 
22 #[cfg(test)]
23 mod tests {
24     use super::*;
25     use serde_json::{self, Value};
26 
27     fn deserialize_fs_type(input: &str) -> Result<FsType, serde_json::Error> {
28         let json = Value::String(input.to_string());
29         serde_json::from_value(json)
30     }
31 
32     #[test]
33     fn test_deserialize_fat32_lowercase() {
34         let r = deserialize_fs_type("fat32");
35         assert_eq!(r.is_ok(), true);
36         let fs_type = r.unwrap();
37         assert_eq!(fs_type, FsType::Fat32);
38     }
39 
40     #[test]
41     fn test_deserialize_fat32_mixed_case() {
42         let r = deserialize_fs_type("FAT32");
43         assert_eq!(r.is_ok(), true);
44         let fs_type = r.unwrap();
45         assert_eq!(fs_type, FsType::Fat32);
46     }
47 
48     #[test]
49     fn testdeserialize_random_string() {
50         assert!(deserialize_fs_type("abc123").is_err());
51     }
52 }
53