1use thiserror::Error;
2
3#[derive(Debug, Clone, PartialEq, Eq, Error)]
4pub enum IdentityError {
5 #[error("invalid {kind} `{value}`: {reason}")]
6 InvalidName {
7 kind: &'static str,
8 value: String,
9 reason: &'static str,
10 },
11 #[error("invalid digest `{value}`: {reason}")]
12 InvalidDigest { value: String, reason: &'static str },
13 #[error("invalid version `{value}`: {reason}")]
14 InvalidVersion { value: String, reason: String },
15 #[error("invalid relative package path `{value}`: {reason}")]
16 InvalidRelativePath { value: String, reason: &'static str },
17 #[error("invalid Git source `{value}`: {reason}")]
18 InvalidGitSource { value: String, reason: &'static str },
19 #[error("invalid Git object id `{value}`: {reason}")]
20 InvalidGitObjectId { value: String, reason: &'static str },
21 #[error("invalid Server project source `{value}`: {reason}")]
22 InvalidServerProjectSource { value: String, reason: &'static str },
23 #[error("invalid registry source `{value}`: {reason}")]
24 InvalidRegistrySource { value: String, reason: &'static str },
25}
26
27#[derive(Debug, Error)]
28pub enum PackageError {
29 #[error(transparent)]
30 Identity(#[from] IdentityError),
31 #[error(transparent)]
32 Manifest(#[from] ManifestError),
33 #[error(transparent)]
34 Lock(#[from] LockError),
35 #[error(transparent)]
36 Graph(#[from] GraphError),
37 #[error(transparent)]
38 Resolve(#[from] ResolveError),
39}
40
41#[derive(Debug, Clone, PartialEq, Eq, Error)]
42pub enum ResolveError {
43 #[error("{0}")]
44 Conflict(String),
45 #[error("candidate metadata provider failed: {0}")]
46 Provider(String),
47}
48
49#[derive(Debug, Clone, PartialEq, Eq, Error)]
50pub enum GraphError {
51 #[error("invalid package graph: {0}")]
52 Invalid(String),
53 #[error(
54 "package graph requires unavailable capabilities at {dependency_path}: {capabilities}"
55 )]
56 UnavailableCapabilities {
57 dependency_path: String,
58 capabilities: String,
59 },
60}
61
62#[derive(Debug, Clone, PartialEq, Eq, Error)]
63pub enum ManifestError {
64 #[error("invalid dependency `{alias}` in [{table}]: {reason}")]
65 InvalidDependency {
66 table: String,
67 alias: String,
68 reason: String,
69 },
70 #[error("invalid package metadata: {0}")]
71 InvalidPackage(String),
72 #[error("invalid feature `{feature}`: {reason}")]
73 InvalidFeature { feature: String, reason: String },
74 #[error("invalid capability `{0}`")]
75 InvalidCapability(String),
76 #[error("invalid target predicate `{value}`: {reason}")]
77 InvalidTarget { value: String, reason: String },
78 #[error("invalid registry `{registry}`: {reason}")]
79 InvalidRegistry { registry: String, reason: String },
80 #[error("invalid source replacement `{registry}`: {reason}")]
81 InvalidSourceReplacement { registry: String, reason: String },
82}
83
84#[derive(Debug, Error)]
85pub enum LockError {
86 #[error("failed to decode runmat.lock: {0}")]
87 Decode(#[from] toml::de::Error),
88 #[error("failed to encode runmat.lock: {0}")]
89 Encode(#[from] toml::ser::Error),
90 #[error("invalid runmat.lock: {0}")]
91 Invalid(String),
92 #[error("incompatible runmat.lock: {0}")]
93 Incompatible(String),
94}