1use cosmwasm_std::StdError;
2use thiserror::Error;
3
4use crate::address_provider::MarsContract;
5
6#[derive(Error, Debug, PartialEq)]
7pub enum MarsError {
8 #[error("{0}")]
9 Std(#[from] StdError),
10
11 #[error("Unauthorized")]
12 Unauthorized {},
13
14 #[error("All params should be available during instantiation")]
15 InstantiateParamsUnavailable {},
16
17 #[error("Incorrect number of addresses, expected {expected:?}, got {actual:?}")]
18 AddressesQueryWrongNumber { expected: u32, actual: u32 },
19
20 #[error("Invalid param: {param_name} is {invalid_value}, but it should be {predicate}")]
21 InvalidParam {
22 param_name: String,
23 invalid_value: String,
24 predicate: String,
25 },
26
27 #[error("One or more addresses are empty: {empty_addresses:?}")]
28 EmptyAddresses { empty_addresses: Vec<MarsContract> },
29}
30
31impl From<MarsError> for StdError {
32 fn from(source: MarsError) -> Self {
33 match source {
34 MarsError::Std(e) => e,
35 e => StdError::generic_err(format!("{}", e)),
36 }
37 }
38}
39
40#[cfg(test)]
43mod tests {
44 use super::*;
45 use crate::error::MarsError;
46
47 #[test]
48 fn test_mars_error_to_std_error() {
49 {
50 let mars_error = MarsError::EmptyAddresses {
51 empty_addresses: vec![MarsContract::RedBank],
52 };
53
54 let std_error: StdError = mars_error.into();
55
56 assert_eq!(
57 std_error,
58 StdError::generic_err("One or more addresses are empty: [RedBank]")
59 )
60 }
61
62 {
63 let mars_error = MarsError::Unauthorized {};
64
65 let std_error: StdError = mars_error.into();
66
67 assert_eq!(std_error, StdError::generic_err("Unauthorized"))
68 }
69
70 {
71 let mars_error = MarsError::Std(StdError::generic_err("Some error"));
72
73 let std_error: StdError = mars_error.into();
74
75 assert_eq!(std_error, StdError::generic_err("Some error"))
76 }
77
78 {
79 let mars_error = MarsError::Std(StdError::invalid_data_size(1, 2));
80
81 let std_error: StdError = mars_error.into();
82
83 assert_eq!(std_error, StdError::invalid_data_size(1, 2))
84 }
85 }
86}