use crate::resolver::ForkMap;
use crate::{DependencyMode, Manifest, ResolverEnvironment};
use uv_distribution_types::{IndexMetadata, RequirementSource};
use uv_normalize::PackageName;
#[derive(Debug, Default, Clone)]
pub(crate) struct Indexes(ForkMap<IndexMetadata>);
impl Indexes {
pub(crate) fn from_manifest(
manifest: &Manifest,
env: &ResolverEnvironment,
dependencies: DependencyMode,
) -> Self {
let mut indexes = ForkMap::default();
for requirement in manifest.requirements(env, dependencies) {
let RequirementSource::Registry {
index: Some(index), ..
} = &requirement.source
else {
continue;
};
indexes.add(requirement.as_ref(), index.clone());
}
Self(indexes)
}
pub(crate) fn contains_key(&self, name: &PackageName) -> bool {
self.0.contains_key(name)
}
pub(crate) fn get(&self, name: &PackageName, env: &ResolverEnvironment) -> Vec<&IndexMetadata> {
self.0.get(name, env)
}
}