aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/package/alias_package.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe/src/package/alias_package.rs')
-rw-r--r--crates/shirabe/src/package/alias_package.rs81
1 files changed, 48 insertions, 33 deletions
diff --git a/crates/shirabe/src/package/alias_package.rs b/crates/shirabe/src/package/alias_package.rs
index cd2e5f1..e115362 100644
--- a/crates/shirabe/src/package/alias_package.rs
+++ b/crates/shirabe/src/package/alias_package.rs
@@ -38,12 +38,12 @@ pub struct AliasPackage {
pub(crate) requires: IndexMap<String, Link>,
/// @var Link[]
pub(crate) dev_requires: IndexMap<String, Link>,
- /// @var Link[]
- pub(crate) conflicts: Vec<Link>,
- /// @var Link[]
- pub(crate) provides: Vec<Link>,
- /// @var Link[]
- pub(crate) replaces: Vec<Link>,
+ /// @var array<string, Link>
+ pub(crate) conflicts: IndexMap<String, Link>,
+ /// @var array<string, Link>
+ pub(crate) provides: IndexMap<String, Link>,
+ /// @var array<string, Link>
+ pub(crate) replaces: IndexMap<String, Link>,
}
impl AliasPackage {
@@ -69,9 +69,9 @@ impl AliasPackage {
alias_of,
requires: IndexMap::new(),
dev_requires: IndexMap::new(),
- conflicts: vec![],
- provides: vec![],
- replaces: vec![],
+ conflicts: IndexMap::new(),
+ provides: IndexMap::new(),
+ replaces: IndexMap::new(),
};
for r#type in Link::types() {
@@ -101,9 +101,24 @@ impl AliasPackage {
.map(|l| (l.get_target().to_string(), l))
.collect();
}
- Link::TYPE_PROVIDE => this.provides = replaced,
- Link::TYPE_CONFLICT => this.conflicts = replaced,
- Link::TYPE_REPLACE => this.replaces = replaced,
+ Link::TYPE_PROVIDE => {
+ this.provides = replaced
+ .into_iter()
+ .map(|l| (l.get_target().to_string(), l))
+ .collect()
+ }
+ Link::TYPE_CONFLICT => {
+ this.conflicts = replaced
+ .into_iter()
+ .map(|l| (l.get_target().to_string(), l))
+ .collect()
+ }
+ Link::TYPE_REPLACE => {
+ this.replaces = replaced
+ .into_iter()
+ .map(|l| (l.get_target().to_string(), l))
+ .collect()
+ }
_ => {}
}
}
@@ -202,7 +217,7 @@ impl std::fmt::Display for AliasPackage {
write!(
f,
"{} ({}alias of {})",
- self.inner,
+ self.alias_of,
if self.root_package_alias { "root " } else { "" },
self.alias_of.get_version(),
)
@@ -210,24 +225,28 @@ impl std::fmt::Display for AliasPackage {
}
impl PackageInterface for AliasPackage {
+ fn as_any(&self) -> &dyn std::any::Any {
+ self
+ }
+
fn get_name(&self) -> &str {
- self.inner.get_name()
+ self.alias_of.get_name()
}
fn get_pretty_name(&self) -> &str {
- self.inner.get_pretty_name()
+ self.alias_of.get_pretty_name()
}
fn get_names(&self, provides: bool) -> Vec<String> {
- self.inner.get_names(provides)
+ self.alias_of.get_names(provides)
}
fn set_id(&mut self, id: i64) {
- self.inner.set_id(id);
+ self.alias_of.set_id(id);
}
fn get_id(&self) -> i64 {
- self.inner.get_id()
+ self.alias_of.get_id()
}
fn is_dev(&self) -> bool {
@@ -251,20 +270,20 @@ impl PackageInterface for AliasPackage {
}
/// @inheritDoc
- /// @return array<string|int, Link>
- fn get_conflicts(&self) -> Vec<Link> {
+ /// @return array<string, Link>
+ fn get_conflicts(&self) -> IndexMap<String, Link> {
self.conflicts.clone()
}
/// @inheritDoc
- /// @return array<string|int, Link>
- fn get_provides(&self) -> Vec<Link> {
+ /// @return array<string, Link>
+ fn get_provides(&self) -> IndexMap<String, Link> {
self.provides.clone()
}
/// @inheritDoc
- /// @return array<string|int, Link>
- fn get_replaces(&self) -> Vec<Link> {
+ /// @return array<string, Link>
+ fn get_replaces(&self) -> IndexMap<String, Link> {
self.replaces.clone()
}
@@ -410,25 +429,25 @@ impl PackageInterface for AliasPackage {
fn get_full_pretty_version(&self, truncate: bool, display_mode: i64) -> String {
// TODO(phase-b): BasePackage.get_full_pretty_version returns Result; bridge here
- self.inner
+ self.alias_of
.get_full_pretty_version(truncate, display_mode)
.unwrap_or_default()
}
fn get_unique_name(&self) -> String {
- self.inner.get_unique_name()
+ self.alias_of.get_unique_name()
}
fn get_pretty_string(&self) -> String {
- self.inner.get_pretty_string()
+ self.alias_of.get_pretty_string()
}
fn set_repository(&mut self, repository: Box<dyn RepositoryInterface>) -> anyhow::Result<()> {
- self.inner.set_repository(repository)
+ self.alias_of.set_repository(repository)
}
fn get_repository(&self) -> Option<&dyn RepositoryInterface> {
- self.inner.get_repository()
+ self.alias_of.get_repository()
}
}
@@ -469,10 +488,6 @@ impl BasePackage for AliasPackage {
todo!()
}
- fn as_any(&self) -> &dyn std::any::Any {
- todo!()
- }
-
fn clone_box(&self) -> Box<dyn BasePackage> {
todo!()
}