aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-04 21:09:02 +0900
committernsfisis <nsfisis@gmail.com>2026-06-04 21:09:02 +0900
commit06e8e14520a4a38fed500581d2b75a42418b22c4 (patch)
tree573af18bf6e0933488aea9c1bac47bf4e857546d /crates/shirabe
parenta9f19862350c6fd3592d93515d869ffe07ecb399 (diff)
downloadphp-shirabe-06e8e14520a4a38fed500581d2b75a42418b22c4.tar.gz
php-shirabe-06e8e14520a4a38fed500581d2b75a42418b22c4.tar.zst
php-shirabe-06e8e14520a4a38fed500581d2b75a42418b22c4.zip
feat(package): implement PackageInterface accessor layer for Package/CompletePackage/RootPackage
Fill the trait-impl todo!() across the package accessor layer so loaded packages are actually usable (the ArrayLoader::load path depends on it): - Package: implement BasePackage/PackageInterface from struct fields and existing inherent methods; Display via get_unique_name. - CompletePackage: delegate PackageInterface to inner Package. - RootPackage: delegate CompletePackageInterface/PackageInterface to inner CompletePackage; RootPackageInterface link setters delegate to Package. Correct three unfaithful trait signatures found during implementation: - get_target_dir returns Option<String> (PHP computes a normalized value; a borrow cannot represent it, and AliasPackage could not implement &str across its aliasOf handle). - RootPackageInterface link setters take IndexMap<String, Link>, matching Package and the real ArrayLoader caller (PHP RootPackage inherits Package::setRequires; the Link[] docblock was imprecise). - get_full_pretty_version takes a DisplayMode enum instead of a raw i64; the match is now exhaustive, so it returns String without an error path. Move mirror conversion to the boundaries: PackageInterface mirror methods use Vec<Mirror> (the typed form, matching the inherent methods), with array<->Mirror conversion done by the producer (ComposerRepository) and consumer (ArrayDumper). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe')
-rw-r--r--crates/shirabe/src/command/create_project_command.rs5
-rw-r--r--crates/shirabe/src/command/licenses_command.rs18
-rw-r--r--crates/shirabe/src/command/show_command.rs29
-rw-r--r--crates/shirabe/src/dependency_resolver/operation/install_operation.rs4
-rw-r--r--crates/shirabe/src/dependency_resolver/operation/mark_alias_installed_operation.rs5
-rw-r--r--crates/shirabe/src/dependency_resolver/operation/mark_alias_uninstalled_operation.rs5
-rw-r--r--crates/shirabe/src/dependency_resolver/operation/uninstall_operation.rs4
-rw-r--r--crates/shirabe/src/dependency_resolver/operation/update_operation.rs21
-rw-r--r--crates/shirabe/src/downloader/file_downloader.rs10
-rw-r--r--crates/shirabe/src/downloader/git_downloader.rs6
-rw-r--r--crates/shirabe/src/installer.rs20
-rw-r--r--crates/shirabe/src/package/alias_package.rs19
-rw-r--r--crates/shirabe/src/package/base_package.rs31
-rw-r--r--crates/shirabe/src/package/complete_package.rs118
-rw-r--r--crates/shirabe/src/package/dumper/array_dumper.rs30
-rw-r--r--crates/shirabe/src/package/handle.rs72
-rw-r--r--crates/shirabe/src/package/package.rs165
-rw-r--r--crates/shirabe/src/package/package_interface.rs33
-rw-r--r--crates/shirabe/src/package/root_alias_package.rs18
-rw-r--r--crates/shirabe/src/package/root_package.rs220
-rw-r--r--crates/shirabe/src/package/root_package_interface.rs10
-rw-r--r--crates/shirabe/src/repository/composer_repository.rs20
22 files changed, 443 insertions, 420 deletions
diff --git a/crates/shirabe/src/command/create_project_command.rs b/crates/shirabe/src/command/create_project_command.rs
index efbfd44..1667ac1 100644
--- a/crates/shirabe/src/command/create_project_command.rs
+++ b/crates/shirabe/src/command/create_project_command.rs
@@ -895,10 +895,7 @@ impl CreateProjectCommand {
io.write_error(&format!(
"<info>Installing {} ({})</info>",
package.get_name(),
- package.get_full_pretty_version(
- false,
- <dyn crate::package::PackageInterface>::DISPLAY_SOURCE_REF_IF_DEV
- )
+ package.get_full_pretty_version(false, crate::package::DisplayMode::SourceRefIfDev)
));
if disable_plugins {
diff --git a/crates/shirabe/src/command/licenses_command.rs b/crates/shirabe/src/command/licenses_command.rs
index 681ac7a..ddd7d3d 100644
--- a/crates/shirabe/src/command/licenses_command.rs
+++ b/crates/shirabe/src/command/licenses_command.rs
@@ -19,7 +19,6 @@ use crate::json::JsonFile;
use crate::package::BasePackage;
use crate::package::CompletePackage;
use crate::package::CompletePackageInterface;
-use crate::package::PackageInterface;
use crate::plugin::CommandEvent;
use crate::plugin::PluginEvents;
use crate::repository::CanonicalPackagesTrait;
@@ -178,14 +177,10 @@ impl LicensesCommand {
};
table.add_row(PhpMixed::List(vec![
Box::new(PhpMixed::String(name)),
- Box::new(PhpMixed::String(
- package
- .get_full_pretty_version(
- false,
- <dyn PackageInterface>::DISPLAY_SOURCE_REF_IF_DEV,
- )
- .to_string(),
- )),
+ Box::new(PhpMixed::String(package.get_full_pretty_version(
+ false,
+ crate::package::DisplayMode::SourceRefIfDev,
+ ))),
Box::new(PhpMixed::String(licenses_str)),
]));
}
@@ -203,7 +198,10 @@ impl LicensesCommand {
let mut dep_info: IndexMap<String, PhpMixed> = IndexMap::new();
dep_info.insert(
"version".to_string(),
- PhpMixed::String(package.get_full_pretty_version(true, 0).to_string()),
+ PhpMixed::String(package.get_full_pretty_version(
+ true,
+ crate::package::DisplayMode::SourceRefIfDev,
+ )),
);
dep_info.insert(
"license".to_string(),
diff --git a/crates/shirabe/src/command/show_command.rs b/crates/shirabe/src/command/show_command.rs
index e7fcfe1..f992798 100644
--- a/crates/shirabe/src/command/show_command.rs
+++ b/crates/shirabe/src/command/show_command.rs
@@ -606,8 +606,9 @@ impl ShowCommand {
&& latest_package
.as_ref()
.unwrap()
- .get_full_pretty_version(true, 0)
- != package.get_full_pretty_version(true, 0)
+ .get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev)
+ != package
+ .get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev)
&& (latest_package
.as_ref()
.unwrap()
@@ -905,9 +906,13 @@ impl ShowCommand {
// Determine if Composer is checking outdated dependencies and if current package should trigger non-default exit code
let mut package_is_up_to_date = if let Some(latest) = latest_package {
- latest.get_full_pretty_version(true, 0)
- == package.get_full_pretty_version(true, 0)
- && latest.as_complete().map_or(true, |c| !c.is_abandoned())
+ latest.get_full_pretty_version(
+ true,
+ crate::package::DisplayMode::SourceRefIfDev,
+ ) == package.get_full_pretty_version(
+ true,
+ crate::package::DisplayMode::SourceRefIfDev,
+ ) && latest.as_complete().map_or(true, |c| !c.is_abandoned())
} else {
false
};
@@ -967,7 +972,10 @@ impl ShowCommand {
}
name_length = name_length.max(package.get_pretty_name().len());
if write_version {
- let mut version_str = package.get_full_pretty_version(true, 0);
+ let mut version_str = package.get_full_pretty_version(
+ true,
+ crate::package::DisplayMode::SourceRefIfDev,
+ );
if format == "text" {
version_str = version_str.trim_start_matches('v').to_string();
}
@@ -1003,7 +1011,10 @@ impl ShowCommand {
}
if write_latest && latest_package.is_some() {
let latest = latest_package.unwrap();
- let mut latest_version_str = latest.get_full_pretty_version(true, 0);
+ let mut latest_version_str = latest.get_full_pretty_version(
+ true,
+ crate::package::DisplayMode::SourceRefIfDev,
+ );
if format == "text" {
latest_version_str =
latest_version_str.trim_start_matches('v').to_string();
@@ -2518,8 +2529,8 @@ impl ShowCommand {
latest_package: PackageInterfaceHandle,
package: PackageInterfaceHandle,
) -> String {
- if latest_package.get_full_pretty_version(true, 0)
- == package.get_full_pretty_version(true, 0)
+ if latest_package.get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev)
+ == package.get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev)
{
return "up-to-date".to_string();
}
diff --git a/crates/shirabe/src/dependency_resolver/operation/install_operation.rs b/crates/shirabe/src/dependency_resolver/operation/install_operation.rs
index 23be038..1331591 100644
--- a/crates/shirabe/src/dependency_resolver/operation/install_operation.rs
+++ b/crates/shirabe/src/dependency_resolver/operation/install_operation.rs
@@ -2,7 +2,6 @@
use crate::dependency_resolver::operation::OperationInterface;
use crate::dependency_resolver::operation::SolverOperation;
-use crate::package::PackageInterface;
use crate::package::PackageInterfaceHandle;
#[derive(Debug)]
@@ -24,8 +23,7 @@ impl InstallOperation {
"{}<info>{}</info> (<comment>{}</comment>)",
if lock { "Locking " } else { "Installing " },
package.get_pretty_name(),
- package
- .get_full_pretty_version(true, <dyn PackageInterface>::DISPLAY_SOURCE_REF_IF_DEV),
+ package.get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev),
)
}
}
diff --git a/crates/shirabe/src/dependency_resolver/operation/mark_alias_installed_operation.rs b/crates/shirabe/src/dependency_resolver/operation/mark_alias_installed_operation.rs
index a10186a..4ef436b 100644
--- a/crates/shirabe/src/dependency_resolver/operation/mark_alias_installed_operation.rs
+++ b/crates/shirabe/src/dependency_resolver/operation/mark_alias_installed_operation.rs
@@ -3,7 +3,6 @@
use crate::dependency_resolver::operation::OperationInterface;
use crate::dependency_resolver::operation::SolverOperation;
use crate::package::AliasPackageHandle;
-use crate::package::PackageInterface;
#[derive(Debug)]
pub struct MarkAliasInstalledOperation {
@@ -38,11 +37,11 @@ impl OperationInterface for MarkAliasInstalledOperation {
"Marking <info>{}</info> (<comment>{}</comment>) as installed, alias of <info>{}</info> (<comment>{}</comment>)",
self.package.get_pretty_name(),
self.package
- .get_full_pretty_version(true, <dyn PackageInterface>::DISPLAY_SOURCE_REF_IF_DEV),
+ .get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev),
self.package.get_alias_of().get_pretty_name(),
self.package
.get_alias_of()
- .get_full_pretty_version(true, <dyn PackageInterface>::DISPLAY_SOURCE_REF_IF_DEV,),
+ .get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev,),
)
}
diff --git a/crates/shirabe/src/dependency_resolver/operation/mark_alias_uninstalled_operation.rs b/crates/shirabe/src/dependency_resolver/operation/mark_alias_uninstalled_operation.rs
index b9ad26e..41b0979 100644
--- a/crates/shirabe/src/dependency_resolver/operation/mark_alias_uninstalled_operation.rs
+++ b/crates/shirabe/src/dependency_resolver/operation/mark_alias_uninstalled_operation.rs
@@ -3,7 +3,6 @@
use crate::dependency_resolver::operation::OperationInterface;
use crate::dependency_resolver::operation::SolverOperation;
use crate::package::AliasPackageHandle;
-use crate::package::PackageInterface;
#[derive(Debug)]
pub struct MarkAliasUninstalledOperation {
@@ -38,11 +37,11 @@ impl OperationInterface for MarkAliasUninstalledOperation {
"Marking <info>{}</info> (<comment>{}</comment>) as uninstalled, alias of <info>{}</info> (<comment>{}</comment>)",
self.package.get_pretty_name(),
self.package
- .get_full_pretty_version(true, <dyn PackageInterface>::DISPLAY_SOURCE_REF_IF_DEV),
+ .get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev),
self.package.get_alias_of().get_pretty_name(),
self.package
.get_alias_of()
- .get_full_pretty_version(true, <dyn PackageInterface>::DISPLAY_SOURCE_REF_IF_DEV,),
+ .get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev,),
)
}
diff --git a/crates/shirabe/src/dependency_resolver/operation/uninstall_operation.rs b/crates/shirabe/src/dependency_resolver/operation/uninstall_operation.rs
index 3ff547c..465297d 100644
--- a/crates/shirabe/src/dependency_resolver/operation/uninstall_operation.rs
+++ b/crates/shirabe/src/dependency_resolver/operation/uninstall_operation.rs
@@ -2,7 +2,6 @@
use crate::dependency_resolver::operation::OperationInterface;
use crate::dependency_resolver::operation::SolverOperation;
-use crate::package::PackageInterface;
use crate::package::PackageInterfaceHandle;
#[derive(Debug)]
@@ -23,8 +22,7 @@ impl UninstallOperation {
format!(
"Removing <info>{}</info> (<comment>{}</comment>)",
package.get_pretty_name(),
- package
- .get_full_pretty_version(true, <dyn PackageInterface>::DISPLAY_SOURCE_REF_IF_DEV),
+ package.get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev),
)
}
}
diff --git a/crates/shirabe/src/dependency_resolver/operation/update_operation.rs b/crates/shirabe/src/dependency_resolver/operation/update_operation.rs
index bc31256..104f4ef 100644
--- a/crates/shirabe/src/dependency_resolver/operation/update_operation.rs
+++ b/crates/shirabe/src/dependency_resolver/operation/update_operation.rs
@@ -2,7 +2,6 @@
use crate::dependency_resolver::operation::OperationInterface;
use crate::dependency_resolver::operation::SolverOperation;
-use crate::package::PackageInterface;
use crate::package::PackageInterfaceHandle;
use crate::package::version::VersionParser;
@@ -33,25 +32,25 @@ impl UpdateOperation {
target_package: PackageInterfaceHandle,
lock: bool,
) -> String {
- let mut from_version = initial_package
- .get_full_pretty_version(false, <dyn PackageInterface>::DISPLAY_SOURCE_REF);
- let mut to_version = target_package
- .get_full_pretty_version(false, <dyn PackageInterface>::DISPLAY_SOURCE_REF);
+ let mut from_version =
+ initial_package.get_full_pretty_version(false, crate::package::DisplayMode::SourceRef);
+ let mut to_version =
+ target_package.get_full_pretty_version(false, crate::package::DisplayMode::SourceRef);
if from_version == to_version
&& initial_package.get_source_reference() != target_package.get_source_reference()
{
from_version = initial_package
- .get_full_pretty_version(true, <dyn PackageInterface>::DISPLAY_SOURCE_REF);
+ .get_full_pretty_version(true, crate::package::DisplayMode::SourceRef);
to_version = target_package
- .get_full_pretty_version(true, <dyn PackageInterface>::DISPLAY_SOURCE_REF);
+ .get_full_pretty_version(true, crate::package::DisplayMode::SourceRef);
} else if from_version == to_version
&& initial_package.get_dist_reference() != target_package.get_dist_reference()
{
- from_version = initial_package
- .get_full_pretty_version(true, <dyn PackageInterface>::DISPLAY_DIST_REF);
- to_version = target_package
- .get_full_pretty_version(true, <dyn PackageInterface>::DISPLAY_DIST_REF);
+ from_version =
+ initial_package.get_full_pretty_version(true, crate::package::DisplayMode::DistRef);
+ to_version =
+ target_package.get_full_pretty_version(true, crate::package::DisplayMode::DistRef);
}
let action_name = if VersionParser::is_upgrade(
diff --git a/crates/shirabe/src/downloader/file_downloader.rs b/crates/shirabe/src/downloader/file_downloader.rs
index 5b66a9f..55882f7 100644
--- a/crates/shirabe/src/downloader/file_downloader.rs
+++ b/crates/shirabe/src/downloader/file_downloader.rs
@@ -241,7 +241,10 @@ impl DownloaderInterface for FileDownloader {
&format!(
" - Loading <info>{}</info> (<comment>{}</comment>) from cache",
package.get_name(),
- package.get_full_pretty_version(true, 0)
+ package.get_full_pretty_version(
+ true,
+ crate::package::DisplayMode::SourceRefIfDev
+ )
),
true,
io_interface::VERY_VERBOSE,
@@ -263,7 +266,10 @@ impl DownloaderInterface for FileDownloader {
self.io.write_error(&format!(
" - Downloading <info>{}</info> (<comment>{}</comment>)",
package.get_name(),
- package.get_full_pretty_version(true, 0)
+ package.get_full_pretty_version(
+ true,
+ crate::package::DisplayMode::SourceRefIfDev
+ )
));
}
diff --git a/crates/shirabe/src/downloader/git_downloader.rs b/crates/shirabe/src/downloader/git_downloader.rs
index 05ef096..34f89a4 100644
--- a/crates/shirabe/src/downloader/git_downloader.rs
+++ b/crates/shirabe/src/downloader/git_downloader.rs
@@ -95,10 +95,8 @@ impl GitDownloader {
&format!(
" - Syncing <info>{}</info> (<comment>{}</comment>) into cache",
package.get_name(),
- package.get_full_pretty_version(
- true,
- <dyn PackageInterface>::DISPLAY_SOURCE_REF_IF_DEV,
- ),
+ package
+ .get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev),
),
true,
io_interface::NORMAL,
diff --git a/crates/shirabe/src/installer.rs b/crates/shirabe/src/installer.rs
index ec374ac..efc41c1 100644
--- a/crates/shirabe/src/installer.rs
+++ b/crates/shirabe/src/installer.rs
@@ -736,7 +736,10 @@ impl Installer {
install_names.push(format!(
"{}:{}",
io.get_package().get_pretty_name(),
- io.get_package().get_full_pretty_version(true, 0)
+ io.get_package().get_full_pretty_version(
+ true,
+ crate::package::DisplayMode::SourceRefIfDev
+ )
));
} else if let Some(uo) = operation.as_update_operation() {
// when mirrors/metadata from a package gets updated we do not want to list it as an
@@ -753,7 +756,10 @@ impl Installer {
update_names.push(format!(
"{}:{}",
uo.get_target_package().get_pretty_name(),
- uo.get_target_package().get_full_pretty_version(true, 0)
+ uo.get_target_package().get_full_pretty_version(
+ true,
+ crate::package::DisplayMode::SourceRefIfDev
+ )
));
} else if let Some(uo) = operation.as_uninstall_operation() {
uninstalls.push(operation.clone_box());
@@ -1137,13 +1143,15 @@ impl Installer {
installs.push(format!(
"{}:{}",
io.get_package().get_pretty_name(),
- io.get_package().get_full_pretty_version(true, 0)
+ io.get_package()
+ .get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev)
));
} else if let Some(uo) = operation.as_update_operation() {
updates.push(format!(
"{}:{}",
uo.get_target_package().get_pretty_name(),
- uo.get_target_package().get_full_pretty_version(true, 0)
+ uo.get_target_package()
+ .get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev)
));
} else if let Some(uo) = operation.as_uninstall_operation() {
uninstalls.push(uo.get_package().get_pretty_name().to_string());
@@ -1336,8 +1344,8 @@ impl Installer {
}
self.fixed_root_package = RootPackageInterfaceHandle::dup(&self.package);
- self.fixed_root_package.set_requires(vec![]);
- self.fixed_root_package.set_dev_requires(vec![]);
+ self.fixed_root_package.set_requires(IndexMap::new());
+ self.fixed_root_package.set_dev_requires(IndexMap::new());
stability_flags.insert(
self.package.get_name(),
diff --git a/crates/shirabe/src/package/alias_package.rs b/crates/shirabe/src/package/alias_package.rs
index b4ddc70..f4b9b55 100644
--- a/crates/shirabe/src/package/alias_package.rs
+++ b/crates/shirabe/src/package/alias_package.rs
@@ -8,6 +8,7 @@ use shirabe_semver::constraint::SimpleConstraint;
use crate::package::BasePackage;
use crate::package::Link;
+use crate::package::Mirror;
use crate::package::PackageHandle;
use crate::package::PackageInterface;
use crate::package::version::VersionParser;
@@ -305,8 +306,8 @@ impl PackageInterface for AliasPackage {
todo!("AliasPackage::get_type cannot return &str across the aliasOf handle")
}
- fn get_target_dir(&self) -> Option<&str> {
- todo!("AliasPackage::get_target_dir cannot return &str across the aliasOf handle")
+ fn get_target_dir(&self) -> Option<String> {
+ self.alias_of.get_target_dir()
}
fn get_extra(&self) -> IndexMap<String, PhpMixed> {
@@ -341,11 +342,11 @@ impl PackageInterface for AliasPackage {
self.alias_of.set_source_reference(reference);
}
- fn set_source_mirrors(&mut self, mirrors: Option<Vec<IndexMap<String, PhpMixed>>>) {
+ fn set_source_mirrors(&mut self, mirrors: Option<Vec<Mirror>>) {
self.alias_of.set_source_mirrors(mirrors);
}
- fn get_source_mirrors(&self) -> Option<Vec<IndexMap<String, PhpMixed>>> {
+ fn get_source_mirrors(&self) -> Option<Vec<Mirror>> {
self.alias_of.get_source_mirrors()
}
@@ -381,11 +382,11 @@ impl PackageInterface for AliasPackage {
self.alias_of.get_transport_options()
}
- fn set_dist_mirrors(&mut self, mirrors: Option<Vec<IndexMap<String, PhpMixed>>>) {
+ fn set_dist_mirrors(&mut self, mirrors: Option<Vec<Mirror>>) {
self.alias_of.set_dist_mirrors(mirrors);
}
- fn get_dist_mirrors(&self) -> Option<Vec<IndexMap<String, PhpMixed>>> {
+ fn get_dist_mirrors(&self) -> Option<Vec<Mirror>> {
self.alias_of.get_dist_mirrors()
}
@@ -441,7 +442,11 @@ impl PackageInterface for AliasPackage {
self.alias_of.set_source_dist_references(reference);
}
- fn get_full_pretty_version(&self, truncate: bool, display_mode: i64) -> String {
+ fn get_full_pretty_version(
+ &self,
+ truncate: bool,
+ display_mode: crate::package::DisplayMode,
+ ) -> String {
self.alias_of
.get_full_pretty_version(truncate, display_mode)
}
diff --git a/crates/shirabe/src/package/base_package.rs b/crates/shirabe/src/package/base_package.rs
index ca6f171..ec2fd3f 100644
--- a/crates/shirabe/src/package/base_package.rs
+++ b/crates/shirabe/src/package/base_package.rs
@@ -3,8 +3,9 @@
use std::sync::LazyLock;
use indexmap::IndexMap;
-use shirabe_php_shim::{LogicException, UnexpectedValueException, preg_quote};
+use shirabe_php_shim::preg_quote;
+use crate::package::DisplayMode;
use crate::package::Link;
use crate::package::PackageInterface;
use crate::repository::PlatformRepository;
@@ -109,48 +110,38 @@ pub trait BasePackage: PackageInterface + std::fmt::Display {
// get_pretty_string is inherited from PackageInterface.
- fn get_full_pretty_version(&self, truncate: bool, display_mode: i64) -> anyhow::Result<String> {
- const DISPLAY_SOURCE_REF_IF_DEV: i64 = <dyn PackageInterface>::DISPLAY_SOURCE_REF_IF_DEV;
- const DISPLAY_SOURCE_REF: i64 = <dyn PackageInterface>::DISPLAY_SOURCE_REF;
- const DISPLAY_DIST_REF: i64 = <dyn PackageInterface>::DISPLAY_DIST_REF;
-
- if display_mode == DISPLAY_SOURCE_REF_IF_DEV
+ fn get_full_pretty_version(&self, truncate: bool, display_mode: DisplayMode) -> String {
+ if display_mode == DisplayMode::SourceRefIfDev
&& (!self.is_dev()
|| (!["hg", "git"].contains(&self.get_source_type().unwrap_or_default())
&& (self.get_source_type().unwrap_or_default() != ""
|| self.get_dist_reference().unwrap_or_default() == "")))
{
- return Ok(self.get_pretty_version().to_string());
+ return self.get_pretty_version().to_string();
}
let reference: Option<&str> = match display_mode {
- DISPLAY_SOURCE_REF_IF_DEV => {
+ DisplayMode::SourceRefIfDev => {
if self.get_source_reference().unwrap_or_default() != "" {
self.get_source_reference()
} else {
self.get_dist_reference()
}
}
- DISPLAY_SOURCE_REF => self.get_source_reference(),
- DISPLAY_DIST_REF => self.get_dist_reference(),
- _ => {
- return Err(anyhow::anyhow!(UnexpectedValueException {
- message: format!("Display mode {} is not supported", display_mode),
- code: 0,
- }));
- }
+ DisplayMode::SourceRef => self.get_source_reference(),
+ DisplayMode::DistRef => self.get_dist_reference(),
};
let reference = match reference {
- None => return Ok(self.get_pretty_version().to_string()),
+ None => return self.get_pretty_version().to_string(),
Some(r) => r,
};
if truncate && reference.len() == 40 && self.get_source_type() != Some("svn") {
- return Ok(format!("{} {}", self.get_pretty_version(), &reference[..7]));
+ return format!("{} {}", self.get_pretty_version(), &reference[..7]);
}
- Ok(format!("{} {}", self.get_pretty_version(), reference))
+ format!("{} {}", self.get_pretty_version(), reference)
}
fn get_stability_priority(&self) -> i64 {
diff --git a/crates/shirabe/src/package/complete_package.rs b/crates/shirabe/src/package/complete_package.rs
index 97669d8..f8293a5 100644
--- a/crates/shirabe/src/package/complete_package.rs
+++ b/crates/shirabe/src/package/complete_package.rs
@@ -1,6 +1,8 @@
//! ref: composer/src/Composer/Package/CompletePackage.php
use crate::package::CompletePackageInterface;
+use crate::package::DisplayMode;
+use crate::package::Mirror;
use crate::package::Package;
use crate::package::PackageInterface;
use indexmap::IndexMap;
@@ -154,159 +156,159 @@ impl CompletePackageInterface for CompletePackage {
impl PackageInterface for CompletePackage {
fn get_name(&self) -> &str {
- todo!()
+ self.inner.get_name()
}
fn get_pretty_name(&self) -> &str {
- todo!()
+ self.inner.get_pretty_name()
}
fn get_names(&self, provides: bool) -> Vec<String> {
- todo!()
+ self.inner.get_names(provides)
}
fn set_id(&mut self, id: i64) {
- todo!()
+ self.inner.set_id(id);
}
fn get_id(&self) -> i64 {
- todo!()
+ self.inner.get_id()
}
fn is_dev(&self) -> bool {
- todo!()
+ self.inner.is_dev()
}
fn get_type(&self) -> &str {
- todo!()
+ PackageInterface::get_type(&self.inner)
}
- fn get_target_dir(&self) -> Option<&str> {
- todo!()
+ fn get_target_dir(&self) -> Option<String> {
+ self.inner.get_target_dir()
}
fn get_extra(&self) -> IndexMap<String, PhpMixed> {
- todo!()
+ self.inner.get_extra().clone()
}
fn set_installation_source(&mut self, r#type: Option<String>) {
- todo!()
+ self.inner.set_installation_source(r#type);
}
fn get_installation_source(&self) -> Option<&str> {
- todo!()
+ self.inner.get_installation_source()
}
fn get_source_type(&self) -> Option<&str> {
- todo!()
+ self.inner.get_source_type()
}
fn get_source_url(&self) -> Option<&str> {
- todo!()
+ self.inner.get_source_url()
}
fn get_source_urls(&self) -> Vec<String> {
- todo!()
+ self.inner.get_source_urls()
}
fn get_source_reference(&self) -> Option<&str> {
- todo!()
+ self.inner.get_source_reference()
}
- fn get_source_mirrors(&self) -> Option<Vec<IndexMap<String, PhpMixed>>> {
- todo!()
+ fn get_source_mirrors(&self) -> Option<Vec<Mirror>> {
+ self.inner.get_source_mirrors().cloned()
}
- fn set_source_mirrors(&mut self, mirrors: Option<Vec<IndexMap<String, PhpMixed>>>) {
- todo!()
+ fn set_source_mirrors(&mut self, mirrors: Option<Vec<Mirror>>) {
+ self.inner.set_source_mirrors(mirrors);
}
fn get_dist_type(&self) -> Option<&str> {
- todo!()
+ self.inner.get_dist_type()
}
fn get_dist_url(&self) -> Option<&str> {
- todo!()
+ self.inner.get_dist_url()
}
fn get_dist_urls(&self) -> Vec<String> {
- todo!()
+ self.inner.get_dist_urls()
}
fn get_dist_reference(&self) -> Option<&str> {
- todo!()
+ self.inner.get_dist_reference()
}
fn get_dist_sha1_checksum(&self) -> Option<&str> {
- todo!()
+ self.inner.get_dist_sha1_checksum()
}
- fn get_dist_mirrors(&self) -> Option<Vec<IndexMap<String, PhpMixed>>> {
- todo!()
+ fn get_dist_mirrors(&self) -> Option<Vec<Mirror>> {
+ self.inner.get_dist_mirrors().cloned()
}
- fn set_dist_mirrors(&mut self, mirrors: Option<Vec<IndexMap<String, PhpMixed>>>) {
- todo!()
+ fn set_dist_mirrors(&mut self, mirrors: Option<Vec<Mirror>>) {
+ self.inner.set_dist_mirrors(mirrors);
}
fn get_version(&self) -> &str {
- todo!()
+ self.inner.get_version()
}
fn get_pretty_version(&self) -> &str {
- todo!()
+ self.inner.get_pretty_version()
}
- fn get_full_pretty_version(&self, truncate: bool, display_mode: i64) -> String {
- todo!()
+ fn get_full_pretty_version(&self, truncate: bool, display_mode: DisplayMode) -> String {
+ PackageInterface::get_full_pretty_version(&self.inner, truncate, display_mode)
}
fn get_release_date(&self) -> Option<chrono::DateTime<chrono::Utc>> {
- todo!()
+ self.inner.get_release_date().copied()
}
fn get_stability(&self) -> &str {
- todo!()
+ self.inner.get_stability()
}
fn get_requires(&self) -> IndexMap<String, super::Link> {
- todo!()
+ self.inner.get_requires().clone()
}
fn get_conflicts(&self) -> IndexMap<String, super::Link> {
- todo!()
+ self.inner.get_conflicts().clone()
}
fn get_provides(&self) -> IndexMap<String, super::Link> {
- todo!()
+ self.inner.get_provides().clone()
}
fn get_replaces(&self) -> IndexMap<String, super::Link> {
- todo!()
+ self.inner.get_replaces().clone()
}
fn get_dev_requires(&self) -> IndexMap<String, super::Link> {
- todo!()
+ self.inner.get_dev_requires().clone()
}
fn get_suggests(&self) -> IndexMap<String, String> {
- todo!()
+ self.inner.get_suggests().clone()
}
fn get_autoload(&self) -> IndexMap<String, PhpMixed> {
- todo!()
+ self.inner.get_autoload().clone()
}
fn get_dev_autoload(&self) -> IndexMap<String, PhpMixed> {
- todo!()
+ self.inner.get_dev_autoload().clone()
}
fn get_include_paths(&self) -> Vec<String> {
- todo!()
+ self.inner.get_include_paths().clone()
}
fn get_php_ext(&self) -> Option<IndexMap<String, PhpMixed>> {
- todo!()
+ self.inner.get_php_ext().cloned()
}
fn set_repository(
@@ -321,55 +323,55 @@ impl PackageInterface for CompletePackage {
}
fn get_binaries(&self) -> Vec<String> {
- todo!()
+ self.inner.get_binaries().clone()
}
fn get_unique_name(&self) -> String {
- todo!()
+ self.inner.get_unique_name()
}
fn get_notification_url(&self) -> Option<&str> {
- todo!()
+ self.inner.get_notification_url()
}
fn get_pretty_string(&self) -> String {
- todo!()
+ self.inner.get_pretty_string()
}
fn is_default_branch(&self) -> bool {
- todo!()
+ self.inner.is_default_branch()
}
fn get_transport_options(&self) -> IndexMap<String, PhpMixed> {
- todo!()
+ self.inner.get_transport_options().clone()
}
fn set_transport_options(&mut self, options: IndexMap<String, PhpMixed>) {
- todo!()
+ self.inner.set_transport_options(options);
}
fn set_source_reference(&mut self, reference: Option<String>) {
- todo!()
+ self.inner.set_source_reference(reference);
}
fn set_source_url(&mut self, url: Option<String>) {
- todo!()
+ self.inner.set_source_url(url);
}
fn set_dist_url(&mut self, url: Option<String>) {
- todo!()
+ self.inner.set_dist_url(url);
}
fn set_dist_type(&mut self, r#type: Option<String>) {
- todo!()
+ self.inner.set_dist_type(r#type);
}
fn set_dist_reference(&mut self, reference: Option<String>) {
- todo!()
+ self.inner.set_dist_reference(reference);
}
fn set_source_dist_references(&mut self, reference: &str) {
- todo!()
+ PackageInterface::set_source_dist_references(&mut self.inner, reference);
}
}
diff --git a/crates/shirabe/src/package/dumper/array_dumper.rs b/crates/shirabe/src/package/dumper/array_dumper.rs
index 3d3b27a..3523d58 100644
--- a/crates/shirabe/src/package/dumper/array_dumper.rs
+++ b/crates/shirabe/src/package/dumper/array_dumper.rs
@@ -3,9 +3,21 @@
use indexmap::IndexMap;
use shirabe_php_shim::PhpMixed;
+use crate::package::Mirror;
use crate::package::PackageInterfaceHandle;
use crate::package::SUPPORTED_LINK_TYPES;
+/// Serializes a Mirror back into the PHP array shape `{url, preferred}`.
+fn mirror_to_php(mirror: Mirror) -> PhpMixed {
+ let mut entry: IndexMap<String, Box<PhpMixed>> = IndexMap::new();
+ entry.insert("url".to_string(), Box::new(PhpMixed::String(mirror.url)));
+ entry.insert(
+ "preferred".to_string(),
+ Box::new(PhpMixed::Bool(mirror.preferred)),
+ );
+ PhpMixed::Array(entry)
+}
+
#[derive(Debug)]
pub struct ArrayDumper;
@@ -62,14 +74,7 @@ impl ArrayDumper {
mirrors
.into_iter()
.enumerate()
- .map(|(i, m)| {
- (
- i.to_string(),
- Box::new(PhpMixed::Array(
- m.into_iter().map(|(k, v)| (k, Box::new(v))).collect(),
- )),
- )
- })
+ .map(|(i, m)| (i.to_string(), Box::new(mirror_to_php(m))))
.collect(),
)),
);
@@ -108,14 +113,7 @@ impl ArrayDumper {
mirrors
.into_iter()
.enumerate()
- .map(|(i, m)| {
- (
- i.to_string(),
- Box::new(PhpMixed::Array(
- m.into_iter().map(|(k, v)| (k, Box::new(v))).collect(),
- )),
- )
- })
+ .map(|(i, m)| (i.to_string(), Box::new(mirror_to_php(m))))
.collect(),
)),
);
diff --git a/crates/shirabe/src/package/handle.rs b/crates/shirabe/src/package/handle.rs
index aecc219..aa21bf1 100644
--- a/crates/shirabe/src/package/handle.rs
+++ b/crates/shirabe/src/package/handle.rs
@@ -193,7 +193,7 @@ macro_rules! delegate_package_interface_to_inner {
fn get_type(&self) -> &str {
self.$field.get_type()
}
- fn get_target_dir(&self) -> Option<&str> {
+ fn get_target_dir(&self) -> Option<String> {
self.$field.get_target_dir()
}
fn get_extra(&self) -> indexmap::IndexMap<String, shirabe_php_shim::PhpMixed> {
@@ -217,15 +217,10 @@ macro_rules! delegate_package_interface_to_inner {
fn get_source_reference(&self) -> Option<&str> {
self.$field.get_source_reference()
}
- fn get_source_mirrors(
- &self,
- ) -> Option<Vec<indexmap::IndexMap<String, shirabe_php_shim::PhpMixed>>> {
+ fn get_source_mirrors(&self) -> Option<Vec<crate::package::Mirror>> {
self.$field.get_source_mirrors()
}
- fn set_source_mirrors(
- &mut self,
- mirrors: Option<Vec<indexmap::IndexMap<String, shirabe_php_shim::PhpMixed>>>,
- ) {
+ fn set_source_mirrors(&mut self, mirrors: Option<Vec<crate::package::Mirror>>) {
self.$field.set_source_mirrors(mirrors);
}
fn get_dist_type(&self) -> Option<&str> {
@@ -243,15 +238,10 @@ macro_rules! delegate_package_interface_to_inner {
fn get_dist_sha1_checksum(&self) -> Option<&str> {
self.$field.get_dist_sha1_checksum()
}
- fn get_dist_mirrors(
- &self,
- ) -> Option<Vec<indexmap::IndexMap<String, shirabe_php_shim::PhpMixed>>> {
+ fn get_dist_mirrors(&self) -> Option<Vec<crate::package::Mirror>> {
self.$field.get_dist_mirrors()
}
- fn set_dist_mirrors(
- &mut self,
- mirrors: Option<Vec<indexmap::IndexMap<String, shirabe_php_shim::PhpMixed>>>,
- ) {
+ fn set_dist_mirrors(&mut self, mirrors: Option<Vec<crate::package::Mirror>>) {
self.$field.set_dist_mirrors(mirrors);
}
fn get_version(&self) -> &str {
@@ -260,7 +250,11 @@ macro_rules! delegate_package_interface_to_inner {
fn get_pretty_version(&self) -> &str {
self.$field.get_pretty_version()
}
- fn get_full_pretty_version(&self, truncate: bool, display_mode: i64) -> String {
+ fn get_full_pretty_version(
+ &self,
+ truncate: bool,
+ display_mode: crate::package::DisplayMode,
+ ) -> String {
self.$field.get_full_pretty_version(truncate, display_mode)
}
fn get_release_date(&self) -> Option<chrono::DateTime<chrono::Utc>> {
@@ -408,11 +402,7 @@ macro_rules! impl_package_interface_handle {
}
pub fn get_target_dir(&self) -> Option<String> {
- self.0
- .borrow()
- .as_package_interface()
- .get_target_dir()
- .map(str::to_string)
+ self.0.borrow().as_package_interface().get_target_dir()
}
pub fn get_extra(&self) -> indexmap::IndexMap<String, shirabe_php_shim::PhpMixed> {
@@ -462,16 +452,11 @@ macro_rules! impl_package_interface_handle {
.map(str::to_string)
}
- pub fn get_source_mirrors(
- &self,
- ) -> Option<Vec<indexmap::IndexMap<String, shirabe_php_shim::PhpMixed>>> {
+ pub fn get_source_mirrors(&self) -> Option<Vec<crate::package::Mirror>> {
self.0.borrow().as_package_interface().get_source_mirrors()
}
- pub fn set_source_mirrors(
- &self,
- mirrors: Option<Vec<indexmap::IndexMap<String, shirabe_php_shim::PhpMixed>>>,
- ) {
+ pub fn set_source_mirrors(&self, mirrors: Option<Vec<crate::package::Mirror>>) {
self.0
.borrow_mut()
.as_package_interface_mut()
@@ -514,16 +499,11 @@ macro_rules! impl_package_interface_handle {
.map(str::to_string)
}
- pub fn get_dist_mirrors(
- &self,
- ) -> Option<Vec<indexmap::IndexMap<String, shirabe_php_shim::PhpMixed>>> {
+ pub fn get_dist_mirrors(&self) -> Option<Vec<crate::package::Mirror>> {
self.0.borrow().as_package_interface().get_dist_mirrors()
}
- pub fn set_dist_mirrors(
- &self,
- mirrors: Option<Vec<indexmap::IndexMap<String, shirabe_php_shim::PhpMixed>>>,
- ) {
+ pub fn set_dist_mirrors(&self, mirrors: Option<Vec<crate::package::Mirror>>) {
self.0
.borrow_mut()
.as_package_interface_mut()
@@ -546,7 +526,11 @@ macro_rules! impl_package_interface_handle {
.to_string()
}
- pub fn get_full_pretty_version(&self, truncate: bool, display_mode: i64) -> String {
+ pub fn get_full_pretty_version(
+ &self,
+ truncate: bool,
+ display_mode: crate::package::DisplayMode,
+ ) -> String {
self.0
.borrow()
.as_package_interface()
@@ -997,7 +981,7 @@ macro_rules! impl_root_package_interface_handle {
.clone()
}
- pub fn set_requires(&self, requires: Vec<crate::package::Link>) {
+ pub fn set_requires(&self, requires: indexmap::IndexMap<String, crate::package::Link>) {
self.0
.borrow_mut()
.as_root_package_interface_mut()
@@ -1005,7 +989,10 @@ macro_rules! impl_root_package_interface_handle {
.set_requires(requires);
}
- pub fn set_dev_requires(&self, dev_requires: Vec<crate::package::Link>) {
+ pub fn set_dev_requires(
+ &self,
+ dev_requires: indexmap::IndexMap<String, crate::package::Link>,
+ ) {
self.0
.borrow_mut()
.as_root_package_interface_mut()
@@ -1013,7 +1000,10 @@ macro_rules! impl_root_package_interface_handle {
.set_dev_requires(dev_requires);
}
- pub fn set_conflicts(&self, conflicts: Vec<crate::package::Link>) {
+ pub fn set_conflicts(
+ &self,
+ conflicts: indexmap::IndexMap<String, crate::package::Link>,
+ ) {
self.0
.borrow_mut()
.as_root_package_interface_mut()
@@ -1021,7 +1011,7 @@ macro_rules! impl_root_package_interface_handle {
.set_conflicts(conflicts);
}
- pub fn set_provides(&self, provides: Vec<crate::package::Link>) {
+ pub fn set_provides(&self, provides: indexmap::IndexMap<String, crate::package::Link>) {
self.0
.borrow_mut()
.as_root_package_interface_mut()
@@ -1029,7 +1019,7 @@ macro_rules! impl_root_package_interface_handle {
.set_provides(provides);
}
- pub fn set_replaces(&self, replaces: Vec<crate::package::Link>) {
+ pub fn set_replaces(&self, replaces: indexmap::IndexMap<String, crate::package::Link>) {
self.0
.borrow_mut()
.as_root_package_interface_mut()
diff --git a/crates/shirabe/src/package/package.rs b/crates/shirabe/src/package/package.rs
index f573326..f1c8cc9 100644
--- a/crates/shirabe/src/package/package.rs
+++ b/crates/shirabe/src/package/package.rs
@@ -3,13 +3,14 @@
use std::rc::Rc;
use chrono::{DateTime, Utc};
-use indexmap::IndexMap;
+use indexmap::{IndexMap, IndexSet};
use shirabe_external_packages::composer::pcre::Preg;
use shirabe_external_packages::composer::util::ComposerMirror;
use shirabe_php_shim::{E_USER_DEPRECATED, LogicException, PhpMixed, strpos, trigger_error};
use crate::package::BasePackage;
+use crate::package::DisplayMode;
use crate::package::Link;
use crate::package::PackageInterface;
use crate::package::version::VersionParser;
@@ -583,128 +584,144 @@ impl BasePackage for Package {
}
impl std::fmt::Display for Package {
- fn fmt(&self, _f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- todo!()
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ write!(f, "{}", self.get_unique_name())
}
}
impl PackageInterface for Package {
fn get_name(&self) -> &str {
- todo!()
+ &self.name
}
fn get_pretty_name(&self) -> &str {
- todo!()
+ &self.pretty_name
}
- fn get_names(&self, _provides: bool) -> Vec<String> {
- todo!()
+ fn get_names(&self, provides: bool) -> Vec<String> {
+ let mut names: IndexSet<String> = IndexSet::new();
+ names.insert(self.get_name().to_string());
+
+ if provides {
+ for (_, link) in self.get_provides() {
+ names.insert(link.get_target().to_string());
+ }
+ }
+
+ for (_, link) in self.get_replaces() {
+ names.insert(link.get_target().to_string());
+ }
+
+ names.into_iter().collect()
}
- fn set_id(&mut self, _id: i64) {
- todo!()
+ fn set_id(&mut self, id: i64) {
+ self.id = id;
}
fn get_id(&self) -> i64 {
- todo!()
+ self.id
}
fn is_dev(&self) -> bool {
- todo!()
+ self.dev
}
fn get_type(&self) -> &str {
- todo!()
+ self.r#type
+ .as_deref()
+ .filter(|s| !s.is_empty())
+ .unwrap_or("library")
}
- fn get_target_dir(&self) -> Option<&str> {
- todo!()
+ fn get_target_dir(&self) -> Option<String> {
+ Package::get_target_dir(self)
}
fn get_extra(&self) -> IndexMap<String, PhpMixed> {
- todo!()
+ self.extra.clone()
}
- fn set_installation_source(&mut self, _type: Option<String>) {
- todo!()
+ fn set_installation_source(&mut self, r#type: Option<String>) {
+ self.installation_source = r#type;
}
fn get_installation_source(&self) -> Option<&str> {
- todo!()
+ self.installation_source.as_deref()
}
fn get_source_type(&self) -> Option<&str> {
- todo!()
+ self.source_type.as_deref()
}
fn get_source_url(&self) -> Option<&str> {
- todo!()
+ self.source_url.as_deref()
}
fn get_source_urls(&self) -> Vec<String> {
- todo!()
+ Package::get_source_urls(self)
}
fn get_source_reference(&self) -> Option<&str> {
- todo!()
+ self.source_reference.as_deref()
}
- fn get_source_mirrors(&self) -> Option<Vec<IndexMap<String, PhpMixed>>> {
- todo!()
+ fn get_source_mirrors(&self) -> Option<Vec<Mirror>> {
+ self.source_mirrors.clone()
}
- fn set_source_mirrors(&mut self, _mirrors: Option<Vec<IndexMap<String, PhpMixed>>>) {
- todo!()
+ fn set_source_mirrors(&mut self, mirrors: Option<Vec<Mirror>>) {
+ self.source_mirrors = mirrors;
}
fn get_dist_type(&self) -> Option<&str> {
- todo!()
+ self.dist_type.as_deref()
}
fn get_dist_url(&self) -> Option<&str> {
- todo!()
+ self.dist_url.as_deref()
}
fn get_dist_urls(&self) -> Vec<String> {
- todo!()
+ Package::get_dist_urls(self)
}
fn get_dist_reference(&self) -> Option<&str> {
- todo!()
+ self.dist_reference.as_deref()
}
fn get_dist_sha1_checksum(&self) -> Option<&str> {
- todo!()
+ self.dist_sha1_checksum.as_deref()
}
- fn get_dist_mirrors(&self) -> Option<Vec<IndexMap<String, PhpMixed>>> {
- todo!()
+ fn get_dist_mirrors(&self) -> Option<Vec<Mirror>> {
+ self.dist_mirrors.clone()
}
- fn set_dist_mirrors(&mut self, _mirrors: Option<Vec<IndexMap<String, PhpMixed>>>) {
- todo!()
+ fn set_dist_mirrors(&mut self, mirrors: Option<Vec<Mirror>>) {
+ self.dist_mirrors = mirrors;
}
fn get_version(&self) -> &str {
- todo!()
+ &self.version
}
fn get_pretty_version(&self) -> &str {
- todo!()
+ &self.pretty_version
}
- fn get_full_pretty_version(&self, _truncate: bool, _display_mode: i64) -> String {
- todo!()
+ fn get_full_pretty_version(&self, truncate: bool, display_mode: DisplayMode) -> String {
+ BasePackage::get_full_pretty_version(self, truncate, display_mode)
}
fn get_release_date(&self) -> Option<DateTime<Utc>> {
- todo!()
+ self.release_date
}
fn get_stability(&self) -> &str {
- todo!()
+ &self.stability
}
fn get_requires(&self) -> IndexMap<String, Link> {
- todo!()
+ self.requires.clone()
}
fn get_conflicts(&self) -> IndexMap<String, Link> {
- todo!()
+ self.conflicts.clone()
}
fn get_provides(&self) -> IndexMap<String, Link> {
- todo!()
+ self.provides.clone()
}
fn get_replaces(&self) -> IndexMap<String, Link> {
- todo!()
+ self.replaces.clone()
}
fn get_dev_requires(&self) -> IndexMap<String, Link> {
- todo!()
+ self.dev_requires.clone()
}
fn get_suggests(&self) -> IndexMap<String, String> {
- todo!()
+ self.suggests.clone()
}
fn get_autoload(&self) -> IndexMap<String, PhpMixed> {
- todo!()
+ self.autoload.clone()
}
fn get_dev_autoload(&self) -> IndexMap<String, PhpMixed> {
- todo!()
+ self.dev_autoload.clone()
}
fn get_include_paths(&self) -> Vec<String> {
- todo!()
+ self.include_paths.clone()
}
fn get_php_ext(&self) -> Option<IndexMap<String, PhpMixed>> {
- todo!()
+ self.php_ext.clone()
}
fn set_repository(&mut self, repository: RepositoryInterfaceHandle) -> anyhow::Result<()> {
if let Some(existing) = self.repository.as_ref().and_then(|w| w.upgrade()) {
@@ -726,42 +743,48 @@ impl PackageInterface for Package {
.map(RepositoryInterfaceHandle::from_rc)
}
fn get_binaries(&self) -> Vec<String> {
- todo!()
+ self.binaries.clone()
}
fn get_unique_name(&self) -> String {
- todo!()
+ format!("{}-{}", self.get_name(), self.get_version())
}
fn get_notification_url(&self) -> Option<&str> {
- todo!()
+ self.notification_url.as_deref()
}
fn get_pretty_string(&self) -> String {
- todo!()
+ format!("{} {}", self.get_pretty_name(), self.get_pretty_version())
}
fn is_default_branch(&self) -> bool {
- todo!()
+ self.is_default_branch
}
fn get_transport_options(&self) -> IndexMap<String, PhpMixed> {
- todo!()
+ self.transport_options.clone()
}
- fn set_transport_options(&mut self, _options: IndexMap<String, PhpMixed>) {
- todo!()
+ fn set_transport_options(&mut self, options: IndexMap<String, PhpMixed>) {
+ self.transport_options = options;
}
- fn set_source_reference(&mut self, _reference: Option<String>) {
- todo!()
+ fn set_source_reference(&mut self, reference: Option<String>) {
+ self.source_reference = reference;
}
- fn set_source_url(&mut self, _url: Option<String>) {
- todo!()
+ fn set_source_url(&mut self, url: Option<String>) {
+ self.source_url = url;
}
- fn set_dist_url(&mut self, _url: Option<String>) {
- todo!()
+ fn set_dist_url(&mut self, url: Option<String>) {
+ self.dist_url = match url.as_deref() {
+ Some("") => None,
+ _ => url,
+ };
}
- fn set_dist_type(&mut self, _type: Option<String>) {
- todo!()
+ fn set_dist_type(&mut self, r#type: Option<String>) {
+ self.dist_type = match r#type.as_deref() {
+ Some("") => None,
+ _ => r#type,
+ };
}
- fn set_dist_reference(&mut self, _reference: Option<String>) {
- todo!()
+ fn set_dist_reference(&mut self, reference: Option<String>) {
+ self.dist_reference = reference;
}
- fn set_source_dist_references(&mut self, _reference: &str) {
- todo!()
+ fn set_source_dist_references(&mut self, reference: &str) {
+ Package::set_source_dist_references(self, reference.to_string());
}
}
diff --git a/crates/shirabe/src/package/package_interface.rs b/crates/shirabe/src/package/package_interface.rs
index 0ab2a09..285a30b 100644
--- a/crates/shirabe/src/package/package_interface.rs
+++ b/crates/shirabe/src/package/package_interface.rs
@@ -5,8 +5,21 @@ use indexmap::IndexMap;
use shirabe_php_shim::PhpMixed;
use crate::package::Link;
+use crate::package::Mirror;
use crate::repository::RepositoryInterfaceHandle;
+/// Selects how `get_full_pretty_version` renders the reference.
+///
+/// ref: PackageInterface::DISPLAY_SOURCE_REF_IF_DEV
+/// ref: PackageInterface::DISPLAY_SOURCE_REF
+/// ref: PackageInterface::DISPLAY_DIST_REF
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+pub enum DisplayMode {
+ SourceRefIfDev,
+ SourceRef,
+ DistRef,
+}
+
/// Defines the essential information a package has that is used during solving/installation
///
/// PackageInterface & derivatives are considered internal, you may use them in type hints but extending/implementing them is not recommended and not supported. Things may change without notice.
@@ -54,7 +67,7 @@ pub trait PackageInterface: std::fmt::Display + std::fmt::Debug {
/// Returns the package targetDir property
///
/// @return ?string The package targetDir
- fn get_target_dir(&self) -> Option<&str>;
+ fn get_target_dir(&self) -> Option<String>;
/// Returns the package extra data
///
@@ -96,10 +109,10 @@ pub trait PackageInterface: std::fmt::Display + std::fmt::Debug {
/// Returns the source mirrors of this package
///
/// @return ?list<array{url: non-empty-string, preferred: bool}>
- fn get_source_mirrors(&self) -> Option<Vec<IndexMap<String, PhpMixed>>>;
+ fn get_source_mirrors(&self) -> Option<Vec<Mirror>>;
/// @param null|list<array{url: non-empty-string, preferred: bool}> $mirrors
- fn set_source_mirrors(&mut self, mirrors: Option<Vec<IndexMap<String, PhpMixed>>>);
+ fn set_source_mirrors(&mut self, mirrors: Option<Vec<Mirror>>);
/// Returns the type of the distribution archive of this version, e.g. zip, tarball
///
@@ -127,10 +140,10 @@ pub trait PackageInterface: std::fmt::Display + std::fmt::Debug {
/// Returns the dist mirrors of this package
///
/// @return ?list<array{url: non-empty-string, preferred: bool}>
- fn get_dist_mirrors(&self) -> Option<Vec<IndexMap<String, PhpMixed>>>;
+ fn get_dist_mirrors(&self) -> Option<Vec<Mirror>>;
/// @param null|list<array{url: non-empty-string, preferred: bool}> $mirrors
- fn set_dist_mirrors(&mut self, mirrors: Option<Vec<IndexMap<String, PhpMixed>>>);
+ fn set_dist_mirrors(&mut self, mirrors: Option<Vec<Mirror>>);
/// Returns the version of this package
///
@@ -149,9 +162,7 @@ pub trait PackageInterface: std::fmt::Display + std::fmt::Debug {
/// @param bool $truncate If the source reference is a sha1 hash, truncate it
/// @param int $displayMode One of the DISPLAY_ constants on this interface determining display of references
/// @return string version
- ///
- /// @phpstan-param self::DISPLAY_SOURCE_REF_IF_DEV|self::DISPLAY_SOURCE_REF|self::DISPLAY_DIST_REF $displayMode
- fn get_full_pretty_version(&self, truncate: bool, display_mode: i64) -> String;
+ fn get_full_pretty_version(&self, truncate: bool, display_mode: DisplayMode) -> String;
/// Returns the release date of the package
fn get_release_date(&self) -> Option<DateTime<Utc>>;
@@ -308,9 +319,3 @@ pub trait PackageInterface: std::fmt::Display + std::fmt::Debug {
None
}
}
-
-impl dyn PackageInterface {
- pub const DISPLAY_SOURCE_REF_IF_DEV: i64 = 0;
- pub const DISPLAY_SOURCE_REF: i64 = 1;
- pub const DISPLAY_DIST_REF: i64 = 2;
-}
diff --git a/crates/shirabe/src/package/root_alias_package.rs b/crates/shirabe/src/package/root_alias_package.rs
index 67e123b..de4733a 100644
--- a/crates/shirabe/src/package/root_alias_package.rs
+++ b/crates/shirabe/src/package/root_alias_package.rs
@@ -82,11 +82,11 @@ impl RootPackageInterface for RootAliasPackage {
todo!("RootAliasPackage::get_config cannot return a borrow across the aliasOf handle")
}
- fn set_requires(&mut self, requires: Vec<Link>) {
- let replaced = self
- .inner
- .inner
- .replace_self_version_dependencies(requires.clone(), Link::TYPE_REQUIRE);
+ fn set_requires(&mut self, requires: IndexMap<String, Link>) {
+ let replaced = self.inner.inner.replace_self_version_dependencies(
+ requires.values().cloned().collect(),
+ Link::TYPE_REQUIRE,
+ );
self.inner.inner.requires = replaced
.into_iter()
.map(|l| (l.get_target().to_string(), l))
@@ -94,19 +94,19 @@ impl RootPackageInterface for RootAliasPackage {
self.alias_of.set_requires(requires);
}
- fn set_dev_requires(&mut self, dev_requires: Vec<Link>) {
+ fn set_dev_requires(&mut self, dev_requires: IndexMap<String, Link>) {
self.alias_of.set_dev_requires(dev_requires);
}
- fn set_conflicts(&mut self, conflicts: Vec<Link>) {
+ fn set_conflicts(&mut self, conflicts: IndexMap<String, Link>) {
self.alias_of.set_conflicts(conflicts);
}
- fn set_provides(&mut self, provides: Vec<Link>) {
+ fn set_provides(&mut self, provides: IndexMap<String, Link>) {
self.alias_of.set_provides(provides);
}
- fn set_replaces(&mut self, replaces: Vec<Link>) {
+ fn set_replaces(&mut self, replaces: IndexMap<String, Link>) {
self.alias_of.set_replaces(replaces);
}
diff --git a/crates/shirabe/src/package/root_package.rs b/crates/shirabe/src/package/root_package.rs
index 9cedc1a..c599612 100644
--- a/crates/shirabe/src/package/root_package.rs
+++ b/crates/shirabe/src/package/root_package.rs
@@ -6,7 +6,9 @@ use shirabe_php_shim::PhpMixed;
use crate::package::CompletePackage;
use crate::package::CompletePackageInterface;
+use crate::package::DisplayMode;
use crate::package::Link;
+use crate::package::Mirror;
use crate::package::PackageInterface;
use crate::package::RootPackageInterface;
use crate::repository::RepositoryInterfaceHandle;
@@ -88,268 +90,268 @@ impl RootPackageInterface for RootPackage {
&self.aliases
}
- fn set_requires(&mut self, requires: Vec<super::Link>) {
- todo!()
+ fn set_requires(&mut self, requires: IndexMap<String, Link>) {
+ self.inner.inner.set_requires(requires);
}
- fn set_dev_requires(&mut self, dev_requires: Vec<super::Link>) {
- todo!()
+ fn set_dev_requires(&mut self, dev_requires: IndexMap<String, Link>) {
+ self.inner.inner.set_dev_requires(dev_requires);
}
- fn set_conflicts(&mut self, conflicts: Vec<super::Link>) {
- todo!()
+ fn set_conflicts(&mut self, conflicts: IndexMap<String, Link>) {
+ self.inner.inner.set_conflicts(conflicts);
}
- fn set_provides(&mut self, provides: Vec<super::Link>) {
- todo!()
+ fn set_provides(&mut self, provides: IndexMap<String, Link>) {
+ self.inner.inner.set_provides(provides);
}
- fn set_replaces(&mut self, replaces: Vec<super::Link>) {
- todo!()
+ fn set_replaces(&mut self, replaces: IndexMap<String, Link>) {
+ self.inner.inner.set_replaces(replaces);
}
fn set_autoload(&mut self, autoload: IndexMap<String, PhpMixed>) {
- todo!()
+ self.inner.inner.set_autoload(autoload);
}
fn set_dev_autoload(&mut self, dev_autoload: IndexMap<String, PhpMixed>) {
- todo!()
+ self.inner.inner.set_dev_autoload(dev_autoload);
}
fn set_suggests(&mut self, suggests: IndexMap<String, String>) {
- todo!()
+ self.inner.inner.set_suggests(suggests);
}
fn set_extra(&mut self, extra: IndexMap<String, PhpMixed>) {
- todo!()
+ self.inner.inner.set_extra(extra);
}
}
impl CompletePackageInterface for RootPackage {
fn get_scripts(&self) -> IndexMap<String, Vec<String>> {
- todo!()
+ CompletePackageInterface::get_scripts(&self.inner)
}
fn set_scripts(&mut self, scripts: IndexMap<String, Vec<String>>) {
- todo!()
+ CompletePackageInterface::set_scripts(&mut self.inner, scripts)
}
fn get_repositories(&self) -> Vec<IndexMap<String, PhpMixed>> {
- todo!()
+ CompletePackageInterface::get_repositories(&self.inner)
}
fn set_repositories(&mut self, repositories: Vec<IndexMap<String, PhpMixed>>) {
- todo!()
+ CompletePackageInterface::set_repositories(&mut self.inner, repositories)
}
fn get_license(&self) -> Vec<String> {
- todo!()
+ CompletePackageInterface::get_license(&self.inner)
}
fn set_license(&mut self, license: Vec<String>) {
- todo!()
+ CompletePackageInterface::set_license(&mut self.inner, license)
}
fn get_keywords(&self) -> Vec<String> {
- todo!()
+ CompletePackageInterface::get_keywords(&self.inner)
}
fn set_keywords(&mut self, keywords: Vec<String>) {
- todo!()
+ CompletePackageInterface::set_keywords(&mut self.inner, keywords)
}
fn get_description(&self) -> Option<&str> {
- todo!()
+ CompletePackageInterface::get_description(&self.inner)
}
fn set_description(&mut self, description: String) {
- todo!()
+ CompletePackageInterface::set_description(&mut self.inner, description)
}
fn get_homepage(&self) -> Option<&str> {
- todo!()
+ CompletePackageInterface::get_homepage(&self.inner)
}
fn set_homepage(&mut self, homepage: String) {
- todo!()
+ CompletePackageInterface::set_homepage(&mut self.inner, homepage)
}
fn get_authors(&self) -> Vec<IndexMap<String, String>> {
- todo!()
+ CompletePackageInterface::get_authors(&self.inner)
}
fn set_authors(&mut self, authors: Vec<IndexMap<String, String>>) {
- todo!()
+ CompletePackageInterface::set_authors(&mut self.inner, authors)
}
fn get_support(&self) -> IndexMap<String, String> {
- todo!()
+ CompletePackageInterface::get_support(&self.inner)
}
fn set_support(&mut self, support: IndexMap<String, String>) {
- todo!()
+ CompletePackageInterface::set_support(&mut self.inner, support)
}
fn get_funding(&self) -> Vec<IndexMap<String, PhpMixed>> {
- todo!()
+ CompletePackageInterface::get_funding(&self.inner)
}
fn set_funding(&mut self, funding: Vec<IndexMap<String, PhpMixed>>) {
- todo!()
+ CompletePackageInterface::set_funding(&mut self.inner, funding)
}
fn is_abandoned(&self) -> bool {
- todo!()
+ CompletePackageInterface::is_abandoned(&self.inner)
}
fn get_replacement_package(&self) -> Option<&str> {
- todo!()
+ CompletePackageInterface::get_replacement_package(&self.inner)
}
fn set_abandoned(&mut self, abandoned: PhpMixed) {
- todo!()
+ CompletePackageInterface::set_abandoned(&mut self.inner, abandoned)
}
fn get_archive_name(&self) -> Option<&str> {
- todo!()
+ CompletePackageInterface::get_archive_name(&self.inner)
}
fn set_archive_name(&mut self, name: String) {
- todo!()
+ CompletePackageInterface::set_archive_name(&mut self.inner, name)
}
fn get_archive_excludes(&self) -> Vec<String> {
- todo!()
+ CompletePackageInterface::get_archive_excludes(&self.inner)
}
fn set_archive_excludes(&mut self, excludes: Vec<String>) {
- todo!()
+ CompletePackageInterface::set_archive_excludes(&mut self.inner, excludes)
}
}
impl std::fmt::Display for RootPackage {
- fn fmt(&self, _f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- todo!()
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ write!(f, "{}", self.get_unique_name())
}
}
impl PackageInterface for RootPackage {
fn get_name(&self) -> &str {
- todo!()
+ self.inner.get_name()
}
fn get_pretty_name(&self) -> &str {
- todo!()
+ self.inner.get_pretty_name()
}
- fn get_names(&self, _provides: bool) -> Vec<String> {
- todo!()
+ fn get_names(&self, provides: bool) -> Vec<String> {
+ self.inner.get_names(provides)
}
- fn set_id(&mut self, _id: i64) {
- todo!()
+ fn set_id(&mut self, id: i64) {
+ self.inner.set_id(id);
}
fn get_id(&self) -> i64 {
- todo!()
+ self.inner.get_id()
}
fn is_dev(&self) -> bool {
- todo!()
+ self.inner.is_dev()
}
fn get_type(&self) -> &str {
- todo!()
+ self.inner.get_type()
}
- fn get_target_dir(&self) -> Option<&str> {
- todo!()
+ fn get_target_dir(&self) -> Option<String> {
+ self.inner.get_target_dir()
}
fn get_extra(&self) -> IndexMap<String, PhpMixed> {
- todo!()
+ self.inner.get_extra()
}
- fn set_installation_source(&mut self, _type: Option<String>) {
- todo!()
+ fn set_installation_source(&mut self, r#type: Option<String>) {
+ self.inner.set_installation_source(r#type);
}
fn get_installation_source(&self) -> Option<&str> {
- todo!()
+ self.inner.get_installation_source()
}
fn get_source_type(&self) -> Option<&str> {
- todo!()
+ self.inner.get_source_type()
}
fn get_source_url(&self) -> Option<&str> {
- todo!()
+ self.inner.get_source_url()
}
fn get_source_urls(&self) -> Vec<String> {
- todo!()
+ self.inner.get_source_urls()
}
fn get_source_reference(&self) -> Option<&str> {
- todo!()
+ self.inner.get_source_reference()
}
- fn get_source_mirrors(&self) -> Option<Vec<IndexMap<String, PhpMixed>>> {
- todo!()
+ fn get_source_mirrors(&self) -> Option<Vec<Mirror>> {
+ self.inner.get_source_mirrors()
}
- fn set_source_mirrors(&mut self, _mirrors: Option<Vec<IndexMap<String, PhpMixed>>>) {
- todo!()
+ fn set_source_mirrors(&mut self, mirrors: Option<Vec<Mirror>>) {
+ self.inner.set_source_mirrors(mirrors);
}
fn get_dist_type(&self) -> Option<&str> {
- todo!()
+ self.inner.get_dist_type()
}
fn get_dist_url(&self) -> Option<&str> {
- todo!()
+ self.inner.get_dist_url()
}
fn get_dist_urls(&self) -> Vec<String> {
- todo!()
+ self.inner.get_dist_urls()
}
fn get_dist_reference(&self) -> Option<&str> {
- todo!()
+ self.inner.get_dist_reference()
}
fn get_dist_sha1_checksum(&self) -> Option<&str> {
- todo!()
+ self.inner.get_dist_sha1_checksum()
}
- fn get_dist_mirrors(&self) -> Option<Vec<IndexMap<String, PhpMixed>>> {
- todo!()
+ fn get_dist_mirrors(&self) -> Option<Vec<Mirror>> {
+ self.inner.get_dist_mirrors()
}
- fn set_dist_mirrors(&mut self, _mirrors: Option<Vec<IndexMap<String, PhpMixed>>>) {
- todo!()
+ fn set_dist_mirrors(&mut self, mirrors: Option<Vec<Mirror>>) {
+ self.inner.set_dist_mirrors(mirrors);
}
fn get_version(&self) -> &str {
- todo!()
+ self.inner.get_version()
}
fn get_pretty_version(&self) -> &str {
- todo!()
+ self.inner.get_pretty_version()
}
- fn get_full_pretty_version(&self, _truncate: bool, _display_mode: i64) -> String {
- todo!()
+ fn get_full_pretty_version(&self, truncate: bool, display_mode: DisplayMode) -> String {
+ self.inner.get_full_pretty_version(truncate, display_mode)
}
fn get_release_date(&self) -> Option<DateTime<Utc>> {
- todo!()
+ self.inner.get_release_date()
}
fn get_stability(&self) -> &str {
- todo!()
+ self.inner.get_stability()
}
fn get_requires(&self) -> IndexMap<String, Link> {
- todo!()
+ self.inner.get_requires()
}
fn get_conflicts(&self) -> IndexMap<String, Link> {
- todo!()
+ self.inner.get_conflicts()
}
fn get_provides(&self) -> IndexMap<String, Link> {
- todo!()
+ self.inner.get_provides()
}
fn get_replaces(&self) -> IndexMap<String, Link> {
- todo!()
+ self.inner.get_replaces()
}
fn get_dev_requires(&self) -> IndexMap<String, Link> {
- todo!()
+ self.inner.get_dev_requires()
}
fn get_suggests(&self) -> IndexMap<String, String> {
- todo!()
+ self.inner.get_suggests()
}
fn get_autoload(&self) -> IndexMap<String, PhpMixed> {
- todo!()
+ self.inner.get_autoload()
}
fn get_dev_autoload(&self) -> IndexMap<String, PhpMixed> {
- todo!()
+ self.inner.get_dev_autoload()
}
fn get_include_paths(&self) -> Vec<String> {
- todo!()
+ self.inner.get_include_paths()
}
fn get_php_ext(&self) -> Option<IndexMap<String, PhpMixed>> {
- todo!()
+ self.inner.get_php_ext()
}
fn set_repository(&mut self, repository: RepositoryInterfaceHandle) -> anyhow::Result<()> {
self.inner.set_repository(repository)
@@ -358,42 +360,42 @@ impl PackageInterface for RootPackage {
self.inner.get_repository()
}
fn get_binaries(&self) -> Vec<String> {
- todo!()
+ self.inner.get_binaries()
}
fn get_unique_name(&self) -> String {
- todo!()
+ self.inner.get_unique_name()
}
fn get_notification_url(&self) -> Option<&str> {
- todo!()
+ self.inner.get_notification_url()
}
fn get_pretty_string(&self) -> String {
- todo!()
+ self.inner.get_pretty_string()
}
fn is_default_branch(&self) -> bool {
- todo!()
+ self.inner.is_default_branch()
}
fn get_transport_options(&self) -> IndexMap<String, PhpMixed> {
- todo!()
+ self.inner.get_transport_options()
}
- fn set_transport_options(&mut self, _options: IndexMap<String, PhpMixed>) {
- todo!()
+ fn set_transport_options(&mut self, options: IndexMap<String, PhpMixed>) {
+ self.inner.set_transport_options(options);
}
- fn set_source_reference(&mut self, _reference: Option<String>) {
- todo!()
+ fn set_source_reference(&mut self, reference: Option<String>) {
+ self.inner.set_source_reference(reference);
}
- fn set_source_url(&mut self, _url: Option<String>) {
- todo!()
+ fn set_source_url(&mut self, url: Option<String>) {
+ self.inner.set_source_url(url);
}
- fn set_dist_url(&mut self, _url: Option<String>) {
- todo!()
+ fn set_dist_url(&mut self, url: Option<String>) {
+ self.inner.set_dist_url(url);
}
- fn set_dist_type(&mut self, _type: Option<String>) {
- todo!()
+ fn set_dist_type(&mut self, r#type: Option<String>) {
+ self.inner.set_dist_type(r#type);
}
- fn set_dist_reference(&mut self, _reference: Option<String>) {
- todo!()
+ fn set_dist_reference(&mut self, reference: Option<String>) {
+ self.inner.set_dist_reference(reference);
}
- fn set_source_dist_references(&mut self, _reference: &str) {
- todo!()
+ fn set_source_dist_references(&mut self, reference: &str) {
+ self.inner.set_source_dist_references(reference);
}
}
diff --git a/crates/shirabe/src/package/root_package_interface.rs b/crates/shirabe/src/package/root_package_interface.rs
index 5f47232..aa2534a 100644
--- a/crates/shirabe/src/package/root_package_interface.rs
+++ b/crates/shirabe/src/package/root_package_interface.rs
@@ -21,15 +21,15 @@ pub trait RootPackageInterface: CompletePackageInterface {
fn get_config(&self) -> &IndexMap<String, PhpMixed>;
- fn set_requires(&mut self, requires: Vec<Link>);
+ fn set_requires(&mut self, requires: IndexMap<String, Link>);
- fn set_dev_requires(&mut self, dev_requires: Vec<Link>);
+ fn set_dev_requires(&mut self, dev_requires: IndexMap<String, Link>);
- fn set_conflicts(&mut self, conflicts: Vec<Link>);
+ fn set_conflicts(&mut self, conflicts: IndexMap<String, Link>);
- fn set_provides(&mut self, provides: Vec<Link>);
+ fn set_provides(&mut self, provides: IndexMap<String, Link>);
- fn set_replaces(&mut self, replaces: Vec<Link>);
+ fn set_replaces(&mut self, replaces: IndexMap<String, Link>);
fn set_autoload(&mut self, autoload: IndexMap<String, PhpMixed>);
diff --git a/crates/shirabe/src/repository/composer_repository.rs b/crates/shirabe/src/repository/composer_repository.rs
index 1f2fcbf..9e5e48c 100644
--- a/crates/shirabe/src/repository/composer_repository.rs
+++ b/crates/shirabe/src/repository/composer_repository.rs
@@ -2772,26 +2772,22 @@ impl ComposerRepository {
if let Some(mirrors) =
self.source_mirrors.as_ref().and_then(|m| m.get(&src_type))
{
- let converted: Vec<IndexMap<String, PhpMixed>> = mirrors
+ let converted: Vec<crate::package::Mirror> = mirrors
.iter()
- .map(|m| {
- let mut im: IndexMap<String, PhpMixed> = IndexMap::new();
- im.insert("url".to_string(), PhpMixed::String(m.url.clone()));
- im.insert("preferred".to_string(), PhpMixed::Bool(m.preferred));
- im
+ .map(|m| crate::package::Mirror {
+ url: m.url.clone(),
+ preferred: m.preferred,
})
.collect();
package.set_source_mirrors(Some(converted));
}
}
if let Some(dist_mirrors) = self.dist_mirrors.as_ref() {
- let converted: Vec<IndexMap<String, PhpMixed>> = dist_mirrors
+ let converted: Vec<crate::package::Mirror> = dist_mirrors
.iter()
- .map(|m| {
- let mut im: IndexMap<String, PhpMixed> = IndexMap::new();
- im.insert("url".to_string(), PhpMixed::String(m.url.clone()));
- im.insert("preferred".to_string(), PhpMixed::Bool(m.preferred));
- im
+ .map(|m| crate::package::Mirror {
+ url: m.url.clone(),
+ preferred: m.preferred,
})
.collect();
package.set_dist_mirrors(Some(converted));