use std::path::Path;
use crate::error::Result;
use crate::uv::UvClient;
use super::compute::canonical_name;
use super::types::PackageEntry;
pub trait PackageEnumerator: Send + Sync {
fn list(&self, venv_path: &Path) -> Result<Vec<PackageEntry>>;
}
pub struct UvPipEnumerator<'a> {
pub uv: &'a UvClient,
}
impl PackageEnumerator for UvPipEnumerator<'_> {
fn list(&self, venv_path: &Path) -> Result<Vec<PackageEntry>> {
let raw = self.uv.pip_list(venv_path)?;
Ok(raw
.into_iter()
.map(|e| PackageEntry {
name: canonical_name(&e.name),
version: e.version,
display_name: e.name,
})
.collect())
}
}