Skip to main content

runmat_package/
error.rs

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}