//! Dependency resolution — convert a manifest's dependency map into a flat //! ordered list of resolved packages. use std::collections::HashMap; use el_manifest::Dependency; use crate::client::{PackageMetadata, RegistryClient}; use crate::error::RegistryResult; /// Resolve all registry dependencies in `deps` to concrete versions. /// /// Path dependencies are skipped (they are local and do not need network /// resolution). pub async fn resolve_deps( client: &RegistryClient, deps: &HashMap, ) -> RegistryResult> { let mut resolved = Vec::new(); for (name, dep) in deps { match dep { Dependency::VersionReq(req) => { let meta = client.fetch_metadata(name, req).await?; resolved.push(meta); } Dependency::Registry { version, .. } => { let meta = client.fetch_metadata(name, version).await?; resolved.push(meta); } Dependency::Path(_) => { // Path deps resolve to the local directory — nothing to fetch. } } } // Sort by name for deterministic ordering. resolved.sort_by(|a, b| a.name.cmp(&b.name)); Ok(resolved) }