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    use std::path::PathBuf;
10
11    tonic::include_proto!("retrom");
12
13    pub const FILE_DESCRIPTOR_SET: &[u8] = tonic::include_file_descriptor_set!("retrom_descriptor");
14
15    impl TryFrom<PathBuf> for crate::retrom::FilesystemNode {
16        type Error = ();
17
18        fn try_from(_path: PathBuf) -> Result<Self, Self::Error> {
19            let _path = _path.canonicalize().or(Err(()))?;
20            let path = _path.to_str().ok_or(())?.into();
21
22            if path == "/" {
23                return Ok(crate::retrom::FilesystemNode {
24                    node_type: crate::retrom::FilesystemNodeType::Directory.into(),
25                    path,
26                    name: "/".into(),
27                });
28            };
29
30            let name = _path.file_name().ok_or(())?.to_str().ok_or(())?.into();
31
32            let node_type = match _path.is_dir() {
33                true => crate::retrom::FilesystemNodeType::Directory.into(),
34                false => crate::retrom::FilesystemNodeType::File.into(),
35            };
36
37            Ok(crate::retrom::FilesystemNode {
38                node_type,
39                path,
40                name,
41            })
42        }
43    }
44}