uv_distribution_types/
id.rs1use std::fmt::{Display, Formatter};
2use std::path::PathBuf;
3
4use uv_cache_key::{CanonicalUrl, RepositoryUrl};
5
6use uv_normalize::PackageName;
7use uv_pep440::Version;
8use uv_pypi_types::HashDigest;
9use uv_redacted::DisplaySafeUrl;
10
11#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
14pub enum PackageId {
15 Name(PackageName),
17 Url(CanonicalUrl),
19}
20
21impl PackageId {
22 pub fn from_registry(name: PackageName) -> Self {
24 Self::Name(name)
25 }
26
27 pub fn from_url(url: &DisplaySafeUrl) -> Self {
29 Self::Url(CanonicalUrl::new(url))
30 }
31}
32
33impl Display for PackageId {
34 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
35 match self {
36 Self::Name(name) => write!(f, "{name}"),
37 Self::Url(url) => write!(f, "{url}"),
38 }
39 }
40}
41
42#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
44pub enum VersionId {
45 NameVersion(PackageName, Version),
47 Url(CanonicalUrl),
49}
50
51impl VersionId {
52 pub fn from_registry(name: PackageName, version: Version) -> Self {
54 Self::NameVersion(name, version)
55 }
56
57 pub fn from_url(url: &DisplaySafeUrl) -> Self {
59 Self::Url(CanonicalUrl::new(url))
60 }
61}
62
63impl Display for VersionId {
64 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
65 match self {
66 Self::NameVersion(name, version) => write!(f, "{name}-{version}"),
67 Self::Url(url) => write!(f, "{url}"),
68 }
69 }
70}
71
72#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
86pub enum DistributionId {
87 Url(CanonicalUrl),
88 PathBuf(PathBuf),
89 Digest(HashDigest),
90 AbsoluteUrl(String),
91 RelativeUrl(String, String),
92}
93
94#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
96pub enum ResourceId {
97 Url(RepositoryUrl),
98 PathBuf(PathBuf),
99 Digest(HashDigest),
100 AbsoluteUrl(String),
101 RelativeUrl(String, String),
102}
103
104impl From<&Self> for VersionId {
105 fn from(value: &Self) -> Self {
107 value.clone()
108 }
109}
110
111impl From<&Self> for DistributionId {
112 fn from(value: &Self) -> Self {
114 value.clone()
115 }
116}
117
118impl From<&Self> for ResourceId {
119 fn from(value: &Self) -> Self {
121 value.clone()
122 }
123}