aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/mozart-core/src/package/package_interface.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-11 02:05:34 +0900
committernsfisis <nsfisis@gmail.com>2026-05-11 02:05:34 +0900
commit4df5f8491320e5795718cf0222e80fa27e57c8ad (patch)
tree707e19f34dbdef18490ec3245d34389e3d189a57 /crates/mozart-core/src/package/package_interface.rs
parent8871b923fa3df1935c263db155cb8bc3d59705cd (diff)
downloadphp-mozart-4df5f8491320e5795718cf0222e80fa27e57c8ad.tar.gz
php-mozart-4df5f8491320e5795718cf0222e80fa27e57c8ad.tar.zst
php-mozart-4df5f8491320e5795718cf0222e80fa27e57c8ad.zip
refactor(package): rename traits and switch dep maps to IndexMap
Rename Package/CompletePackage to PackageInterface/CompletePackageInterface to mirror Composer's interface names, and split each into its own module under crates/mozart-core/src/package/. Switch dependency-link and metadata maps from BTreeMap to indexmap::IndexMap so serialized JSON preserves the original key ordering rather than sorting alphabetically — matching PHP associative-array semantics. The --sort-packages behaviour in `require` is preserved via sort_unstable_keys.
Diffstat (limited to 'crates/mozart-core/src/package/package_interface.rs')
-rw-r--r--crates/mozart-core/src/package/package_interface.rs33
1 files changed, 33 insertions, 0 deletions
diff --git a/crates/mozart-core/src/package/package_interface.rs b/crates/mozart-core/src/package/package_interface.rs
new file mode 100644
index 0000000..7006657
--- /dev/null
+++ b/crates/mozart-core/src/package/package_interface.rs
@@ -0,0 +1,33 @@
+use crate::package::{AutoloadRules, Link, Stability};
+
+/// ref: \Composer\Package\PackageInterface
+pub trait PackageInterface {
+ fn name(&self) -> &str;
+ fn pretty_name(&self) -> &str;
+ fn version(&self) -> &str;
+ fn pretty_version(&self) -> &str;
+ fn package_type(&self) -> &str;
+ fn target_dir(&self) -> Option<&str>;
+ fn source_type(&self) -> Option<&str>;
+ fn source_url(&self) -> Option<&str>;
+ fn source_reference(&self) -> Option<&str>;
+ fn dist_type(&self) -> Option<&str>;
+ fn dist_url(&self) -> Option<&str>;
+ fn dist_reference(&self) -> Option<&str>;
+ fn dist_sha1_checksum(&self) -> Option<&str>;
+ fn release_date(&self) -> Option<&str>;
+ fn extra(&self) -> &indexmap::IndexMap<String, serde_json::Value>;
+ fn binaries(&self) -> &[String];
+ fn is_dev(&self) -> bool;
+ fn stability(&self) -> Stability;
+ fn notification_url(&self) -> Option<&str>;
+ fn requires(&self) -> &indexmap::IndexMap<String, Link>;
+ fn conflicts(&self) -> &indexmap::IndexMap<String, Link>;
+ fn provides(&self) -> &indexmap::IndexMap<String, Link>;
+ fn replaces(&self) -> &indexmap::IndexMap<String, Link>;
+ fn dev_requires(&self) -> &indexmap::IndexMap<String, Link>;
+ fn suggests(&self) -> &indexmap::IndexMap<String, String>;
+ fn autoload(&self) -> &AutoloadRules;
+ fn dev_autoload(&self) -> &AutoloadRules;
+ fn is_default_branch(&self) -> bool;
+}