1#[derive(Debug, thiserror::Error)]
5pub enum PkgError {
6 #[error("failed to parse manifest: {0}")]
8 ManifestParse(String),
9
10 #[error("invalid version: {0}")]
12 InvalidVersion(String),
13
14 #[error("dependency resolution failed: {0}")]
16 ResolutionFailed(String),
17
18 #[error("unresolvable dependency constraints:\n{}", format_conflicts(.0))]
20 UnresolvableConstraints(Vec<String>),
21
22 #[error("package not found: {0}")]
24 PackageNotFound(String),
25
26 #[error("I/O error: {0}")]
28 Io(String),
29
30 #[error("failed to parse lockfile: {0}")]
32 LockfileParse(String),
33
34 #[error("network error: {0}")]
36 Network(String),
37
38 #[error("checksum mismatch: expected {expected}, got {actual}")]
40 ChecksumMismatch {
41 expected: String,
43 actual: String,
45 },
46}
47
48fn format_conflicts(conflicts: &[String]) -> String {
49 conflicts
50 .iter()
51 .map(|c| format!(" - {c}"))
52 .collect::<Vec<_>>()
53 .join("\n")
54}
55
56pub type PkgResult<T> = Result<T, PkgError>;