1use std::{io, path::PathBuf};
2
3use semver::Error as SemverError;
4use thiserror::Error;
5
6pub type Result<T> = std::result::Result<T, Error>;
7
8#[derive(Debug, Error)]
9pub enum Error {
10 #[error("failed to resolve workspace path {path}")]
11 ResolveWorkspacePath {
12 path: PathBuf,
13 #[source]
14 source: io::Error,
15 },
16
17 #[error("invalid workspace path: {path}")]
18 InvalidWorkspacePath { path: PathBuf },
19
20 #[error("couldn't locate manifest {path}")]
21 MissingManifest { path: PathBuf },
22
23 #[error("failed to initialize cargo configuration")]
24 CargoConfig {
25 #[source]
26 source: anyhow::Error,
27 },
28
29 #[error("failed to prepare cargo build configuration")]
30 BuildConfiguration {
31 #[source]
32 source: anyhow::Error,
33 },
34
35 #[error("failed to initialize workspace from {manifest_path}")]
36 WorkspaceInit {
37 manifest_path: PathBuf,
38 #[source]
39 source: anyhow::Error,
40 },
41
42 #[error("failed to create artifacts directory {path}")]
43 CreateArtifactsDir {
44 path: PathBuf,
45 #[source]
46 source: io::Error,
47 },
48
49 #[error("no CosmWasm contracts found under {contracts_dir}")]
50 NoContracts { contracts_dir: PathBuf },
51
52 #[error("failed to compile workspace packages")]
53 CompileWorkspace {
54 #[source]
55 source: anyhow::Error,
56 },
57
58 #[error("failed to create an ephemeral workspace for {package}")]
59 EphemeralWorkspace {
60 package: String,
61 #[source]
62 source: anyhow::Error,
63 },
64
65 #[error("failed to read checksums from {path}")]
66 ReadChecksums {
67 path: PathBuf,
68 #[source]
69 source: io::Error,
70 },
71
72 #[error("failed to write checksums to {path}")]
73 WriteChecksums {
74 path: PathBuf,
75 #[source]
76 source: io::Error,
77 },
78
79 #[error("failed to calculate a checksum for {path}")]
80 ArtifactChecksum {
81 path: PathBuf,
82 #[source]
83 source: io::Error,
84 },
85
86 #[error("artifact path {path} is missing a filename")]
87 MissingArtifactFileName { path: PathBuf },
88
89 #[error("artifact path {path} is missing a valid stem or extension")]
90 InvalidArtifactFileName { path: PathBuf },
91
92 #[error("failed to read WASM artifact {path}")]
93 ReadWasm {
94 path: PathBuf,
95 #[source]
96 source: io::Error,
97 },
98
99 #[error("failed to parse WASM artifact {path}: {reason}")]
100 ParseWasm { path: PathBuf, reason: String },
101
102 #[error("failed to create optimized WASM artifact {path}")]
103 CreateWasm {
104 path: PathBuf,
105 #[source]
106 source: io::Error,
107 },
108
109 #[error("failed to write optimized WASM artifact {path}")]
110 WriteWasm {
111 path: PathBuf,
112 #[source]
113 source: io::Error,
114 },
115
116 #[error("failed to create the crates.io client")]
117 UpdateCheckClient {
118 #[source]
119 source: anyhow::Error,
120 },
121
122 #[error("failed to fetch crate metadata for {crate_name}")]
123 UpdateCheckRequest {
124 crate_name: String,
125 #[source]
126 source: crates_io_api::Error,
127 },
128
129 #[error("failed to parse crates.io version {version} for {crate_name}")]
130 UpdateCheckVersion {
131 crate_name: String,
132 version: String,
133 #[source]
134 source: SemverError,
135 },
136}