use uv_cache::{ARCHIVE_VERSION, ArchiveId, Cache};
use uv_distribution_filename::WheelFilename;
use uv_distribution_types::Hashed;
use uv_pypi_types::{HashDigest, HashDigests};
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct Archive {
pub id: ArchiveId,
pub hashes: HashDigests,
pub filename: WheelFilename,
pub version: u8,
}
impl Archive {
pub(crate) fn new(id: ArchiveId, hashes: HashDigests, filename: WheelFilename) -> Self {
Self {
id,
hashes,
filename,
version: ARCHIVE_VERSION,
}
}
pub(crate) fn exists(&self, cache: &Cache) -> bool {
self.version == ARCHIVE_VERSION && cache.archive(&self.id).exists()
}
}
impl Hashed for Archive {
fn hashes(&self) -> &[HashDigest] {
self.hashes.as_slice()
}
}