From 4df5f8491320e5795718cf0222e80fa27e57c8ad Mon Sep 17 00:00:00 2001 From: nsfisis Date: Mon, 11 May 2026 02:05:34 +0900 Subject: refactor(package): rename traits and switch dep maps to IndexMap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- crates/mozart/src/commands/show.rs | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) (limited to 'crates/mozart/src/commands/show.rs') diff --git a/crates/mozart/src/commands/show.rs b/crates/mozart/src/commands/show.rs index d0a2218..81eaaad 100644 --- a/crates/mozart/src/commands/show.rs +++ b/crates/mozart/src/commands/show.rs @@ -6,7 +6,6 @@ use mozart_core::console_writeln; use mozart_core::console_writeln_error; use mozart_core::matches_wildcard; use mozart_core::platform::is_platform_package; -use std::collections::BTreeMap; use std::path::Path; #[derive(Default, Args)] @@ -255,15 +254,15 @@ struct PackageDetail { support: Option, /// A13: autoload rules. autoload: Option, - require: BTreeMap, - require_dev: BTreeMap, + require: indexmap::IndexMap, + require_dev: indexmap::IndexMap, /// A12: conflict links. - conflict: BTreeMap, + conflict: indexmap::IndexMap, /// A12: provide links. - provide: BTreeMap, + provide: indexmap::IndexMap, /// A12: replace links. - replace: BTreeMap, - suggest: BTreeMap, + replace: indexmap::IndexMap, + suggest: indexmap::IndexMap, } #[derive(Debug, Clone, Copy, PartialEq, Eq)] @@ -1132,7 +1131,7 @@ async fn print_package_detail( /// Print a named section of package links (requires, conflict, etc.). fn print_links_section( label: &str, - links: &BTreeMap, + links: &indexmap::IndexMap, io: std::sync::Arc>>, ) { if links.is_empty() { @@ -2077,7 +2076,7 @@ fn get_installed_release_date( fn get_installed_link_map( pkg: &mozart_core::repository::installed::InstalledPackageEntry, key: &str, -) -> BTreeMap { +) -> indexmap::IndexMap { pkg.extra_fields .get(key) .and_then(|v| v.as_object()) @@ -2092,7 +2091,7 @@ fn get_installed_link_map( /// Extract a map of `{package: reason}` from an installed package's suggest field. fn get_installed_suggest_map( pkg: &mozart_core::repository::installed::InstalledPackageEntry, -) -> BTreeMap { +) -> indexmap::IndexMap { pkg.extra_fields .get("suggest") .and_then(|v| v.as_object()) @@ -2268,8 +2267,7 @@ mod tests { #[test] fn test_get_installed_description_present() { - use std::collections::BTreeMap; - let mut extra = BTreeMap::new(); + let mut extra = indexmap::IndexMap::new(); extra.insert( "description".to_string(), serde_json::Value::String("A logging library".to_string()), @@ -2293,7 +2291,6 @@ mod tests { #[test] fn test_get_installed_description_absent() { - use std::collections::BTreeMap; let pkg = mozart_core::repository::installed::InstalledPackageEntry { name: "psr/log".to_string(), version: "3.0.0".to_string(), @@ -2306,15 +2303,14 @@ mod tests { aliases: vec![], homepage: None, support: None, - extra_fields: BTreeMap::new(), + extra_fields: indexmap::IndexMap::new(), }; assert_eq!(get_installed_description(&pkg), ""); } #[test] fn test_get_installed_keywords() { - use std::collections::BTreeMap; - let mut extra = BTreeMap::new(); + let mut extra = indexmap::IndexMap::new(); extra.insert( "keywords".to_string(), serde_json::json!(["log", "psr3", "logging"]), -- cgit v1.3.1