use std::path::Path;
use uv_cache_info::CacheInfo;
use uv_distribution_filename::WheelFilename;
use uv_distribution_types::{BuildInfo, CachedDist, Dist, Hashed};
use uv_metadata::read_flat_wheel_metadata;
use uv_pypi_types::{HashDigest, HashDigests, ResolutionMetadata};
use crate::Error;
#[derive(Debug, Clone)]
pub struct LocalWheel {
pub(crate) dist: Dist,
pub(crate) filename: WheelFilename,
pub(crate) archive: Box<Path>,
pub(crate) cache: CacheInfo,
pub(crate) build: Option<BuildInfo>,
pub(crate) hashes: HashDigests,
}
impl LocalWheel {
pub fn target(&self) -> &Path {
&self.archive
}
pub fn remote(&self) -> &Dist {
&self.dist
}
pub fn filename(&self) -> &WheelFilename {
&self.filename
}
pub fn metadata(&self) -> Result<ResolutionMetadata, Error> {
read_flat_wheel_metadata(&self.filename, &self.archive)
.map_err(|err| Error::WheelMetadata(self.archive.to_path_buf(), Box::new(err)))
}
}
impl Hashed for LocalWheel {
fn hashes(&self) -> &[HashDigest] {
self.hashes.as_slice()
}
}
impl From<LocalWheel> for CachedDist {
fn from(wheel: LocalWheel) -> Self {
Self::from_remote(
wheel.dist,
wheel.filename,
wheel.hashes,
wheel.cache,
wheel.build,
wheel.archive,
)
}
}
impl std::fmt::Display for LocalWheel {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.remote())
}
}