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