asimov_module/resolve/
error.rs1use alloc::string::String;
4
5#[cfg(feature = "std")]
6#[derive(Debug, thiserror::Error)]
7pub enum FromDirError {
8 #[error("failed to read manifest directory `{path}`: {source}")]
9 ManifestDirIo {
10 path: std::path::PathBuf,
11 #[source]
12 source: std::io::Error,
13 },
14 #[error("failed to read manifest file `{path}`: {source}")]
15 ManifestIo {
16 path: std::path::PathBuf,
17 #[source]
18 source: std::io::Error,
19 },
20 #[error("failed to parse manifest file `{path}`: {source}")]
21 Parse {
22 path: std::path::PathBuf,
23 #[source]
24 source: serde_yml::Error,
25 },
26 #[error("failed to add manifest file `{path}` to resolver: {source}")]
27 Insert {
28 path: std::path::PathBuf,
29 #[source]
30 source: UrlParseError,
31 },
32}
33
34impl From<FromDirError> for clientele::SysexitsError {
35 fn from(value: FromDirError) -> Self {
36 use FromDirError::*;
37 use clientele::SysexitsError::*;
38 match value {
39 ManifestDirIo { .. } => EX_IOERR,
40 ManifestIo { .. } => EX_IOERR,
41 Parse { .. } => EX_CONFIG,
42 Insert { source, .. } => source.into(),
43 }
44 }
45}
46
47#[derive(Clone, Debug, thiserror::Error)]
48pub enum UrlParseError {
49 #[error("URL can't be empty")]
50 EmptyUrl,
51 #[error("invalid URL `{url}`: {source}")]
52 InvalidUrl {
53 url: String,
54 #[source]
55 source: url::ParseError,
56 },
57}
58
59impl From<UrlParseError> for clientele::SysexitsError {
60 fn from(_value: UrlParseError) -> Self {
61 clientele::SysexitsError::EX_USAGE
62 }
63}