diff --git a/src/core/mod.rs b/src/core/mod.rs index b945e42..7330c06 100644 --- a/src/core/mod.rs +++ b/src/core/mod.rs @@ -1,3 +1,4 @@ +pub mod resource; pub mod client; pub mod eventloop; pub mod nodelist; diff --git a/src/core/resource.rs b/src/core/resource.rs new file mode 100644 index 0000000..f69032a --- /dev/null +++ b/src/core/resource.rs @@ -0,0 +1,37 @@ +use std::path::PathBuf; + +pub type ResourceID = Box; + +pub trait ResourceIDTrait { + fn get_file(&self, prefixes: &Vec) -> Option; +} + +impl ResourceIDTrait for PathBuf { + fn get_file(&self, _prefixes: &Vec) -> Option { + if self.is_absolute() && self.as_path().exists() { + Some(self.clone()) + } else { + None + } + } +} + +pub struct NamespacedResourceID { + pub namespace: String, + pub path: PathBuf, +} + +impl ResourceIDTrait for NamespacedResourceID { + fn get_file(&self, prefixes: &Vec) -> Option { + for prefix in prefixes { + let mut path = prefix.clone(); + path.push(self.namespace.clone()); + path.push(self.path.clone()); + + if path.as_path().exists() { + return Some(path); + } + } + None + } +}