diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-06-04 21:09:02 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-06-04 21:09:02 +0900 |
| commit | 06e8e14520a4a38fed500581d2b75a42418b22c4 (patch) | |
| tree | 573af18bf6e0933488aea9c1bac47bf4e857546d /crates/shirabe/src/package | |
| parent | a9f19862350c6fd3592d93515d869ffe07ecb399 (diff) | |
| download | php-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/src/package')
| -rw-r--r-- | crates/shirabe/src/package/alias_package.rs | 19 | ||||
| -rw-r--r-- | crates/shirabe/src/package/base_package.rs | 31 | ||||
| -rw-r--r-- | crates/shirabe/src/package/complete_package.rs | 118 | ||||
| -rw-r--r-- | crates/shirabe/src/package/dumper/array_dumper.rs | 30 | ||||
| -rw-r--r-- | crates/shirabe/src/package/handle.rs | 72 | ||||
| -rw-r--r-- | crates/shirabe/src/package/package.rs | 165 | ||||
| -rw-r--r-- | crates/shirabe/src/package/package_interface.rs | 33 | ||||
| -rw-r--r-- | crates/shirabe/src/package/root_alias_package.rs | 18 | ||||
| -rw-r--r-- | crates/shirabe/src/package/root_package.rs | 220 | ||||
| -rw-r--r-- | crates/shirabe/src/package/root_package_interface.rs | 10 |
10 files changed, 366 insertions, 350 deletions
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>); |
