retrom_codegen/
lib.rs

1pub mod storage_type;
2pub mod timestamp;
3
4pub mod igdb {
5    tonic::include_proto!("igdb");
6}
7
8pub mod retrom {
9    pub mod files {
10        tonic::include_proto!("retrom.files");
11    }
12
13    use std::path::PathBuf;
14
15    tonic::include_proto!("retrom");
16
17    pub const FILE_DESCRIPTOR_SET: &[u8] = tonic::include_file_descriptor_set!("retrom_descriptor");
18
19    impl TryFrom<PathBuf> for crate::retrom::FilesystemNode {
20        type Error = ();
21
22        fn try_from(_path: PathBuf) -> Result<Self, Self::Error> {
23            let _path = _path.canonicalize().or(Err(()))?;
24            let path = _path.to_str().ok_or(())?.into();
25
26            if path == "/" {
27                return Ok(crate::retrom::FilesystemNode {
28                    node_type: crate::retrom::FilesystemNodeType::Directory.into(),
29                    path,
30                    name: "/".into(),
31                });
32            };
33
34            let name = _path.file_name().ok_or(())?.to_str().ok_or(())?.into();
35
36            let node_type = match _path.is_dir() {
37                true => crate::retrom::FilesystemNodeType::Directory.into(),
38                false => crate::retrom::FilesystemNodeType::File.into(),
39            };
40
41            Ok(crate::retrom::FilesystemNode {
42                node_type,
43                path,
44                name,
45            })
46        }
47    }
48
49    impl TryFrom<PathBuf> for crate::retrom::files::FileStat {
50        type Error = ();
51
52        fn try_from(path_buf: PathBuf) -> Result<Self, Self::Error> {
53            let metadata = path_buf.metadata().ok();
54            let path = path_buf.to_str().ok_or(())?.into();
55
56            let node_type = match metadata.as_ref().map(|m| m.is_dir()) {
57                Some(true) => crate::retrom::FilesystemNodeType::Directory as i32,
58                Some(false) => crate::retrom::FilesystemNodeType::File as i32,
59                None => crate::retrom::FilesystemNodeType::Unknown as i32,
60            };
61
62            let created_at = metadata
63                .as_ref()
64                .and_then(|m| m.created().ok().map(|t| t.into()));
65
66            let updated_at = metadata
67                .as_ref()
68                .and_then(|m| m.modified().ok().map(|t| t.into()));
69
70            let byte_size = metadata.as_ref().map(|m| m.len());
71
72            Ok(crate::retrom::files::FileStat {
73                path,
74                node_type,
75                created_at,
76                updated_at,
77                byte_size,
78            })
79        }
80    }
81}