1use cosmwasm_std::{OverflowError, StdError};
2use cw_asset::AssetError;
3use cw_semver::Error as CwSemverError;
4use semver::{Error as SemverError, Version};
5use thiserror::Error;
6
7use crate::objects::{ans_host::AnsHostError, version_control::VersionControlError};
8
9#[derive(Error, Debug, PartialEq)]
11pub enum AbstractError {
12 #[error("Std error encountered while handling account object: {0}")]
13 Std(#[from] StdError),
14
15 #[error("{0}")]
16 Asset(#[from] AssetError),
17
18 #[error("cw math overflow error: {0}")]
19 Overflow(#[from] OverflowError),
20
21 #[error("{0}")]
22 VersionControlError(#[from] VersionControlError),
23
24 #[error("{0}")]
25 AnsHostError(#[from] AnsHostError),
26
27 #[error("Semver error encountered while handling account object: {0}")]
28 Semver(String),
29
30 #[error("Entry {actual} should be formatted as {expected}")]
31 EntryFormattingError { actual: String, expected: String },
32
33 #[error("Object {object} should be formatted {expected} but is {actual}")]
34 FormattingError {
35 object: String,
36 expected: String,
37 actual: String,
38 },
39
40 #[error("Cannot downgrade contract {} from {} to {}", contract, from, to)]
41 CannotDowngradeContract {
42 contract: String,
43 from: Version,
44 to: Version,
45 },
46
47 #[error("Cannot rename contract from {} to {}", from, to)]
48 ContractNameMismatch { from: String, to: String },
49
50 #[error("Adapter {0} not installed on Account")]
51 AdapterNotInstalled(String),
52
53 #[error("App {0} not installed on Account")]
54 AppNotInstalled(String),
55
56 #[error("version for {0} in missing")]
57 MissingVersion(String),
58
59 #[error("Abstract storage object {object} errors with {msg}")]
60 Storage { object: String, msg: String },
61
62 #[error("assertion: {0}")]
63 Assert(String),
64
65 #[error("fee error: {0}")]
67 Fee(String),
68
69 #[error("deposit error: {0}")]
71 Deposit(String),
72
73 #[error("The version or name of this module was not consistent between its stores (cw2: {cw2} and abstract module data: {module}).")]
74 UnequalModuleData { cw2: String, module: String },
75
76 #[error("Cannot Skip module version {contract} from {from} to {to}")]
77 CannotSkipVersion {
78 contract: String,
79 from: Version,
80 to: Version,
81 },
82}
83
84impl From<SemverError> for AbstractError {
85 fn from(err: SemverError) -> Self {
86 AbstractError::Semver(err.to_string())
87 }
88}
89
90impl From<CwSemverError> for AbstractError {
91 fn from(err: CwSemverError) -> Self {
92 AbstractError::Semver(err.to_string())
93 }
94}