loadsmith_registry/
error.rs1use 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>;