Skip to content

Commit b780155

Browse files
Make diagnostic methods dynamic on error (#9037)
## Summary I need these to accept "any error".
1 parent e0f657e commit b780155

File tree

1 file changed

+21
-19
lines changed

1 file changed

+21
-19
lines changed

crates/uv/src/commands/diagnostics.rs

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ use uv_normalize::PackageName;
99

1010
use crate::commands::pip;
1111

12+
type Error = Box<dyn std::error::Error + Send + Sync>;
13+
1214
/// Static map of common package name typos or misconfigurations to their correct package names.
1315
static SUGGESTIONS: LazyLock<FxHashMap<PackageName, PackageName>> = LazyLock::new(|| {
1416
let suggestions: Vec<(String, String)> =
@@ -74,37 +76,37 @@ impl OperationDiagnostic {
7476
dist,
7577
err,
7678
)) => {
77-
download_and_build(dist, err);
79+
download_and_build(dist, Box::new(err));
7880
None
7981
}
8082
pip::operations::Error::Resolve(uv_resolver::ResolveError::Build(dist, err)) => {
81-
build(dist, err);
83+
build(dist, Box::new(err));
8284
None
8385
}
8486
pip::operations::Error::Requirements(uv_requirements::Error::DownloadAndBuild(
8587
dist,
8688
err,
8789
)) => {
88-
download_and_build(dist, err);
90+
download_and_build(dist, Box::new(err));
8991
None
9092
}
9193
pip::operations::Error::Requirements(uv_requirements::Error::Build(dist, err)) => {
92-
build(dist, err);
94+
build(dist, Box::new(err));
9395
None
9496
}
9597
pip::operations::Error::Prepare(uv_installer::PrepareError::Build(dist, err)) => {
96-
build(dist, err);
98+
build(dist, Box::new(err));
9799
None
98100
}
99101
pip::operations::Error::Prepare(uv_installer::PrepareError::DownloadAndBuild(
100102
dist,
101103
err,
102104
)) => {
103-
download_and_build(dist, err);
105+
download_and_build(dist, Box::new(err));
104106
None
105107
}
106108
pip::operations::Error::Prepare(uv_installer::PrepareError::Download(dist, err)) => {
107-
download(dist, err);
109+
download(dist, Box::new(err));
108110
None
109111
}
110112
pip::operations::Error::Requirements(err) => {
@@ -123,19 +125,19 @@ impl OperationDiagnostic {
123125
}
124126

125127
/// Render a remote source distribution build failure with a help message.
126-
pub(crate) fn download_and_build(sdist: Box<SourceDist>, cause: uv_distribution::Error) {
128+
pub(crate) fn download_and_build(sdist: Box<SourceDist>, cause: Error) {
127129
#[derive(Debug, miette::Diagnostic, thiserror::Error)]
128130
#[error("Failed to download and build `{sdist}`")]
129131
#[diagnostic()]
130-
struct Error {
132+
struct Diagnostic {
131133
sdist: Box<SourceDist>,
132134
#[source]
133-
cause: uv_distribution::Error,
135+
cause: Error,
134136
#[help]
135137
help: Option<String>,
136138
}
137139

138-
let report = miette::Report::new(Error {
140+
let report = miette::Report::new(Diagnostic {
139141
help: SUGGESTIONS.get(sdist.name()).map(|suggestion| {
140142
format!(
141143
"`{}` is often confused for `{}` Did you mean to install `{}` instead?",
@@ -151,19 +153,19 @@ pub(crate) fn download_and_build(sdist: Box<SourceDist>, cause: uv_distribution:
151153
}
152154

153155
/// Render a remote binary distribution download failure with a help message.
154-
pub(crate) fn download(sdist: Box<BuiltDist>, cause: uv_distribution::Error) {
156+
pub(crate) fn download(sdist: Box<BuiltDist>, cause: Error) {
155157
#[derive(Debug, miette::Diagnostic, thiserror::Error)]
156158
#[error("Failed to download `{sdist}`")]
157159
#[diagnostic()]
158-
struct Error {
160+
struct Diagnostic {
159161
sdist: Box<BuiltDist>,
160162
#[source]
161-
cause: uv_distribution::Error,
163+
cause: Error,
162164
#[help]
163165
help: Option<String>,
164166
}
165167

166-
let report = miette::Report::new(Error {
168+
let report = miette::Report::new(Diagnostic {
167169
help: SUGGESTIONS.get(sdist.name()).map(|suggestion| {
168170
format!(
169171
"`{}` is often confused for `{}` Did you mean to install `{}` instead?",
@@ -179,19 +181,19 @@ pub(crate) fn download(sdist: Box<BuiltDist>, cause: uv_distribution::Error) {
179181
}
180182

181183
/// Render a local source distribution build failure with a help message.
182-
pub(crate) fn build(sdist: Box<SourceDist>, cause: uv_distribution::Error) {
184+
pub(crate) fn build(sdist: Box<SourceDist>, cause: Error) {
183185
#[derive(Debug, miette::Diagnostic, thiserror::Error)]
184186
#[error("Failed to build `{sdist}`")]
185187
#[diagnostic()]
186-
struct Error {
188+
struct Diagnostic {
187189
sdist: Box<SourceDist>,
188190
#[source]
189-
cause: uv_distribution::Error,
191+
cause: Error,
190192
#[help]
191193
help: Option<String>,
192194
}
193195

194-
let report = miette::Report::new(Error {
196+
let report = miette::Report::new(Diagnostic {
195197
help: SUGGESTIONS.get(sdist.name()).map(|suggestion| {
196198
format!(
197199
"`{}` is often confused for `{}` Did you mean to install `{}` instead?",

0 commit comments

Comments
 (0)