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