use std::fmt::{Display, Formatter};
use std::path::PathBuf;
use uv_cache_key::{CanonicalUrl, RepositoryUrl};
use uv_normalize::PackageName;
use uv_pep440::Version;
use uv_pypi_types::HashDigest;
use uv_redacted::DisplaySafeUrl;
#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub enum PackageId {
Name(PackageName),
Url(CanonicalUrl),
}
impl PackageId {
pub fn from_registry(name: PackageName) -> Self {
Self::Name(name)
}
pub fn from_url(url: &DisplaySafeUrl) -> Self {
Self::Url(CanonicalUrl::new(url))
}
}
impl Display for PackageId {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
match self {
Self::Name(name) => write!(f, "{name}"),
Self::Url(url) => write!(f, "{url}"),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub enum VersionId {
NameVersion(PackageName, Version),
Url(CanonicalUrl),
}
impl VersionId {
pub fn from_registry(name: PackageName, version: Version) -> Self {
Self::NameVersion(name, version)
}
pub fn from_url(url: &DisplaySafeUrl) -> Self {
Self::Url(CanonicalUrl::new(url))
}
}
impl Display for VersionId {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
match self {
Self::NameVersion(name, version) => write!(f, "{name}-{version}"),
Self::Url(url) => write!(f, "{url}"),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub enum DistributionId {
Url(CanonicalUrl),
PathBuf(PathBuf),
Digest(HashDigest),
AbsoluteUrl(String),
RelativeUrl(String, String),
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub enum ResourceId {
Url(RepositoryUrl),
PathBuf(PathBuf),
Digest(HashDigest),
AbsoluteUrl(String),
RelativeUrl(String, String),
}
impl From<&Self> for VersionId {
fn from(value: &Self) -> Self {
value.clone()
}
}
impl From<&Self> for DistributionId {
fn from(value: &Self) -> Self {
value.clone()
}
}
impl From<&Self> for ResourceId {
fn from(value: &Self) -> Self {
value.clone()
}
}