test_path/
lib.rs

1use std::fs::{create_dir_all, remove_dir_all};
2use std::path::{Path, Component};
3use std::env::{temp_dir};
4
5pub fn is_valid(path: &str) -> bool {
6    let p = Path::new(path);
7    let mut t = temp_dir();
8
9    if p.has_root() {
10        for c in p.components() {
11            match c {
12                Component::Prefix(_p) => {
13                    continue;
14                }
15                Component::RootDir => {
16                    continue;
17                }
18                _ => {
19                    t = t.join(c);
20                }
21            }
22        }
23    } else {
24        t = t.join(p);
25    }
26
27    match create_dir_all(&t) {
28        Err(_e) => return false,
29        Ok(()) => {
30            match remove_dir_all(&t) {
31                Err(_e) => return false,
32                Ok(()) => return true,
33            }
34        }
35    }
36}
37
38#[cfg(test)]
39mod tests {
40    use super::*;
41
42    #[test]
43    fn test_is_valid() {
44        assert_eq!(is_valid("1"), true);
45        assert_eq!(is_valid("C:/测试"), true);
46        assert_eq!(is_valid("C:/test"), true);
47        assert_eq!(is_valid("X:/x/y/z"), true);
48        assert_eq!(is_valid(r"C:/te|st"), false);
49    }
50}