Skip to main content

cw_optimizoor/
error.rs

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}