mars_core/
error.rs

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// TESTS
41
42#[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}