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}