Skip to content

Commit b7e13c8

Browse files
authored
refactor: clippy::result_large_err for the Error type (#21)
1 parent f8a6b69 commit b7e13c8

File tree

2 files changed

+105
-81
lines changed

2 files changed

+105
-81
lines changed

src/error.rs

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
use std::path::PathBuf;
2+
3+
use serde::Serialize;
4+
use thiserror::Error;
5+
6+
use crate::PackageLocator;
7+
8+
#[derive(Debug, Clone, PartialEq, Serialize, Error)]
9+
pub enum Error {
10+
#[error(transparent)]
11+
BadSpecifier(Box<BadSpecifier>),
12+
13+
#[error(transparent)]
14+
FailedManifestHydration(Box<FailedManifestHydration>),
15+
16+
#[error(transparent)]
17+
MissingPeerDependency(Box<MissingPeerDependency>),
18+
19+
#[error(transparent)]
20+
UndeclaredDependency(Box<UndeclaredDependency>),
21+
22+
#[error(transparent)]
23+
MissingDependency(Box<MissingDependency>),
24+
}
25+
26+
#[derive(Debug, Clone, PartialEq, Serialize, Error)]
27+
#[error("{message}")]
28+
pub struct BadSpecifier {
29+
pub message: String,
30+
pub specifier: String,
31+
}
32+
33+
#[derive(Debug, Clone, PartialEq, Serialize, Error)]
34+
#[error("{message}")]
35+
pub struct FailedManifestHydration {
36+
pub message: String,
37+
pub manifest_path: PathBuf,
38+
}
39+
40+
#[derive(Debug, Clone, PartialEq, Serialize, Error)]
41+
#[error("{message}")]
42+
pub struct MissingPeerDependency {
43+
pub message: String,
44+
pub request: String,
45+
46+
pub dependency_name: String,
47+
48+
pub issuer_locator: PackageLocator,
49+
pub issuer_path: PathBuf,
50+
51+
pub broken_ancestors: Vec<PackageLocator>,
52+
}
53+
54+
#[derive(Debug, Clone, PartialEq, Serialize, Error)]
55+
#[error("{message}")]
56+
pub struct UndeclaredDependency {
57+
pub message: String,
58+
pub request: String,
59+
60+
pub dependency_name: String,
61+
62+
pub issuer_locator: PackageLocator,
63+
pub issuer_path: PathBuf,
64+
}
65+
66+
#[derive(Debug, Clone, PartialEq, Serialize, Error)]
67+
#[error("{message}")]
68+
pub struct MissingDependency {
69+
pub message: String,
70+
pub request: String,
71+
72+
pub dependency_locator: PackageLocator,
73+
pub dependency_name: String,
74+
75+
pub issuer_locator: PackageLocator,
76+
pub issuer_path: PathBuf,
77+
}

src/lib.rs

Lines changed: 28 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -1,83 +1,27 @@
1-
#![expect(clippy::result_large_err)] // TODO: FIXME
2-
31
pub mod fs;
42

53
mod builtins;
4+
mod error;
65
mod util;
76
mod zip;
87

9-
use fancy_regex::Regex;
10-
use indexmap::IndexMap;
11-
use lazy_static::lazy_static;
12-
use serde::{Deserialize, Serialize};
13-
use serde_with::{DefaultOnNull, serde_as};
148
use std::{
159
collections::{HashMap, HashSet, hash_map::Entry},
16-
fmt,
1710
path::{Path, PathBuf},
1811
};
19-
use util::RegexDef;
20-
21-
#[derive(Clone, Debug, PartialEq, Serialize)]
22-
pub enum Error {
23-
BadSpecifier {
24-
message: String,
25-
26-
specifier: String,
27-
},
28-
29-
FailedManifestHydration {
30-
message: String,
31-
32-
manifest_path: PathBuf,
33-
},
34-
35-
MissingPeerDependency {
36-
message: String,
37-
request: String,
38-
39-
dependency_name: String,
40-
41-
issuer_locator: PackageLocator,
42-
issuer_path: PathBuf,
43-
44-
broken_ancestors: Vec<PackageLocator>,
45-
},
4612

47-
UndeclaredDependency {
48-
message: String,
49-
request: String,
50-
51-
dependency_name: String,
52-
53-
issuer_locator: PackageLocator,
54-
issuer_path: PathBuf,
55-
},
56-
57-
MissingDependency {
58-
message: String,
59-
request: String,
60-
61-
dependency_locator: PackageLocator,
62-
dependency_name: String,
13+
use fancy_regex::Regex;
14+
use indexmap::IndexMap;
15+
use lazy_static::lazy_static;
16+
use serde::{Deserialize, Serialize};
17+
use serde_with::{DefaultOnNull, serde_as};
6318

64-
issuer_locator: PackageLocator,
65-
issuer_path: PathBuf,
66-
},
67-
}
19+
use crate::util::RegexDef;
6820

69-
impl fmt::Display for Error {
70-
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
71-
let message = match &self {
72-
Error::BadSpecifier { message, .. } => message.clone(),
73-
Error::FailedManifestHydration { message, .. } => message.clone(),
74-
Error::MissingPeerDependency { message, .. } => message.clone(),
75-
Error::UndeclaredDependency { message, .. } => message.clone(),
76-
Error::MissingDependency { message, .. } => message.clone(),
77-
};
78-
write!(f, "{message}")
79-
}
80-
}
21+
pub use crate::error::{
22+
BadSpecifier, Error, FailedManifestHydration, MissingDependency, MissingPeerDependency,
23+
UndeclaredDependency,
24+
};
8125

8226
#[derive(Debug)]
8327
pub enum Resolution {
@@ -206,9 +150,11 @@ pub fn parse_bare_identifier(specifier: &str) -> Result<(String, Option<String>)
206150
false => parse_global_package_name(specifier),
207151
};
208152

209-
name.ok_or_else(|| Error::BadSpecifier {
210-
message: String::from("Invalid specifier"),
211-
specifier: specifier.to_string(),
153+
name.ok_or_else(|| {
154+
Error::BadSpecifier(Box::new(BadSpecifier {
155+
message: String::from("Invalid specifier"),
156+
specifier: specifier.to_string(),
157+
}))
212158
})
213159
}
214160

@@ -225,13 +171,14 @@ pub fn find_closest_pnp_manifest_path<P: AsRef<Path>>(p: P) -> Option<PathBuf> {
225171
}
226172

227173
pub fn load_pnp_manifest<P: AsRef<Path>>(p: P) -> Result<Manifest, Error> {
228-
let manifest_content =
229-
std::fs::read_to_string(p.as_ref()).map_err(|err| Error::FailedManifestHydration {
174+
let manifest_content = std::fs::read_to_string(p.as_ref()).map_err(|err| {
175+
Error::FailedManifestHydration(Box::new(FailedManifestHydration {
230176
message: format!(
231177
"We failed to read the content of the manifest.\n\nOriginal error: {err}"
232178
),
233179
manifest_path: p.as_ref().to_path_buf(),
234-
})?;
180+
}))
181+
})?;
235182

236183
lazy_static! {
237184
static ref RE: Regex = Regex::new(
@@ -242,10 +189,10 @@ pub fn load_pnp_manifest<P: AsRef<Path>>(p: P) -> Result<Manifest, Error> {
242189

243190
let manifest_match = RE.find(&manifest_content)
244191
.unwrap_or_default()
245-
.ok_or_else(|| Error::FailedManifestHydration {
192+
.ok_or_else(|| Error::FailedManifestHydration(Box::new(FailedManifestHydration {
246193
message: String::from("We failed to locate the PnP data payload inside its manifest file. Did you manually edit the file?"),
247194
manifest_path: p.as_ref().to_path_buf(),
248-
})?;
195+
})))?;
249196

250197
let iter = manifest_content.chars().skip(manifest_match.end());
251198
let mut json_string = String::default();
@@ -267,10 +214,10 @@ pub fn load_pnp_manifest<P: AsRef<Path>>(p: P) -> Result<Manifest, Error> {
267214
}
268215

269216
let mut manifest: Manifest = serde_json::from_str(&json_string.to_owned())
270-
.map_err(|err| Error::FailedManifestHydration {
217+
.map_err(|err| Error::FailedManifestHydration(Box::new(FailedManifestHydration {
271218
message: format!("We failed to parse the PnP data payload as proper JSON; Did you manually edit the file?\n\nOriginal error: {err}"),
272219
manifest_path: p.as_ref().to_path_buf(),
273-
})?;
220+
})))?;
274221

275222
init_pnp_manifest(&mut manifest, p.as_ref());
276223

@@ -449,13 +396,13 @@ pub fn resolve_to_unqualified_via_manifest<P: AsRef<Path>>(
449396
)
450397
};
451398

452-
return Err(Error::UndeclaredDependency {
399+
return Err(Error::UndeclaredDependency(Box::new(UndeclaredDependency {
453400
message,
454401
request: specifier.to_string(),
455402
dependency_name: ident,
456403
issuer_locator: parent_locator.clone(),
457404
issuer_path: parent.as_ref().to_path_buf(),
458-
});
405+
})));
459406
}
460407

461408
if let Some(resolution) = reference_or_alias {
@@ -513,14 +460,14 @@ pub fn resolve_to_unqualified_via_manifest<P: AsRef<Path>>(
513460
)
514461
};
515462

516-
Err(Error::MissingPeerDependency {
463+
Err(Error::MissingPeerDependency(Box::new(MissingPeerDependency {
517464
message,
518465
request: specifier.to_string(),
519466
dependency_name: ident,
520467
issuer_locator: parent_locator.clone(),
521468
issuer_path: parent.as_ref().to_path_buf(),
522469
broken_ancestors: [].to_vec(),
523-
})
470+
})))
524471
}
525472
} else {
526473
Ok(Resolution::Skipped)

0 commit comments

Comments
 (0)