Skip to main content

loadsmith_registry/
error.rs

1use std::error::Error as StdError;
2
3use camino::Utf8PathBuf;
4
5#[derive(Debug, thiserror::Error)]
6pub enum Error {
7    #[error("I/O error")]
8    Io(#[from] std::io::Error),
9
10    #[error("thunderstore client error")]
11    Thunderstore(#[from] thunderstore::Error),
12
13    #[error("zip error")]
14    Zip(#[from] zip::result::ZipError),
15
16    #[error("json error")]
17    Json(#[from] serde_json::Error),
18
19    #[error("registry not found: {0}")]
20    RegistryNotFound(String),
21
22    #[error(transparent)]
23    Other(Box<dyn StdError + Send + Sync>),
24
25    #[error("registry requires metadata, but none was provided")]
26    MissingMetadata,
27
28    #[error("registry got invalid metadata")]
29    InvalidMetadata(#[source] serde_json::Error),
30
31    #[error("file not found: {0}")]
32    FileNotFound(Utf8PathBuf),
33
34    #[error("invalid file type: {0}")]
35    InvalidFileType(Utf8PathBuf),
36
37    #[error("package not found")]
38    PackageNotFound,
39
40    #[error("package version not found")]
41    VersionNotFound,
42
43    #[error("local package has no manifest")]
44    LocalManifestMissing,
45
46    #[error(
47        "version could not be determined from local package, please specify a source_version in metadata"
48    )]
49    LocalVersionMissing,
50}
51
52impl Error {
53    pub fn other<E: StdError + Send + Sync + 'static>(err: E) -> Self {
54        Self::Other(Box::new(err))
55    }
56}
57
58pub type Result<T> = std::result::Result<T, Error>;