This repository has been archived on 2026-08-20. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
el-retired/_archive/rust-bootstrap/engrams/el-registry/src/resolve.rs
T

41 lines
1.2 KiB
Rust

//! 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<String, Dependency>,
) -> RegistryResult<Vec<PackageMetadata>> {
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)
}