cog_task/resource/
address.rs1use std::path::{Path, PathBuf};
2
3#[derive(Clone, Debug, PartialEq, Eq, Hash)]
4pub enum ResourceAddr {
5 Ref(PathBuf),
6 Text(PathBuf),
7 Image(PathBuf),
8 Audio(PathBuf),
9 Video(PathBuf),
10 Stream(PathBuf),
11}
12
13impl ResourceAddr {
14 #[inline]
15 pub fn path(&self) -> &Path {
16 match self {
17 ResourceAddr::Ref(p) => p,
18 ResourceAddr::Text(p) => p,
19 ResourceAddr::Image(p) => p,
20 ResourceAddr::Audio(p) => p,
21 ResourceAddr::Video(p) => p,
22 ResourceAddr::Stream(p) => p,
23 }
24 }
25
26 #[inline]
27 pub fn prefix(&self, parent: &Path) -> Self {
28 match self {
29 ResourceAddr::Ref(p) => ResourceAddr::Ref(parent.join(p)),
30 ResourceAddr::Text(p) => ResourceAddr::Text(parent.join(p)),
31 ResourceAddr::Image(p) => ResourceAddr::Image(parent.join(p)),
32 ResourceAddr::Audio(p) => ResourceAddr::Audio(parent.join(p)),
33 ResourceAddr::Video(p) => ResourceAddr::Video(parent.join(p)),
34 ResourceAddr::Stream(p) => ResourceAddr::Stream(parent.join(p)),
35 }
36 }
37
38 pub fn extension(&self) -> Option<String> {
39 self.path()
40 .extension()
41 .map(|ext| ext.to_str().unwrap().to_lowercase())
42 }
43}