file_matcher/
alias.rs

1use crate::{EntryName, EntryType, OneEntry, OneEntryNamed};
2use std::path::PathBuf;
3
4#[derive(Debug)]
5pub struct EntityAlias {
6    entity_named: Box<dyn OneEntryNamed>,
7    alias: String,
8}
9
10impl Clone for EntityAlias {
11    fn clone(&self) -> Self {
12        Self {
13            entity_named: self.entity_named.boxed(),
14            alias: self.alias.clone(),
15        }
16    }
17}
18
19impl EntityAlias {
20    pub fn new(entity_named: Box<dyn OneEntryNamed>, alias: impl Into<String>) -> Self {
21        Self {
22            entity_named,
23            alias: alias.into(),
24        }
25    }
26
27    pub fn within(&self, directory: impl Into<PathBuf>) -> OneEntry {
28        self.within_path_buf(directory.into())
29    }
30}
31
32impl OneEntryNamed for EntityAlias {
33    fn within_path_buf(&self, directory: PathBuf) -> OneEntry {
34        OneEntry::new(self.boxed(), directory)
35    }
36
37    fn entry_name(&self) -> &EntryName {
38        self.entity_named.entry_name()
39    }
40
41    fn entry_type(&self) -> &EntryType {
42        self.entity_named.entry_type()
43    }
44
45    fn name_alias(&self) -> Option<&str> {
46        Some(self.alias.as_str())
47    }
48
49    fn boxed(&self) -> Box<dyn OneEntryNamed> {
50        Box::new(self.clone())
51    }
52}