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}