use std::collections::HashMap;
use crate::ecosystem::types::*;
use std::collections::{BTreeMap};
#[derive(Debug, Clone)]
pub struct VersionSelector {
}
impl VersionSelector {
pub fn new() -> Self {
Self {}
}
pub fn select_best_versions(
&self,
dependencies: &HashMap<String, Vec<PackageInfo>>,
) -> Result<HashMap<String, Version>, Box<dyn std::error::Error>> {
let mut selected = HashMap::new();
for (name, packages) in dependencies {
let best_version: _ = self.select_best_version(packages)?;
selected.insert(name.clone(), best_version);
}
Ok(selected)
}
fn select_best_version(
&self,
packages: &[PackageInfo],
) -> Result<Version, Box<dyn std::error::Error>> {
packages
.first()
.map(|p| p.version.clone())
.ok_or_else(|| "No packages available".into())
}
pub fn check_compatibility(
&self,
version: &Version,
constraints: &[VersionConstraint],
) -> bool {
constraints.iter().all(|c| c.matches(version))
}
}