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}