cog_task/resource/
address.rs

1use 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}