casper_contract_sdk/
types.rs

1use casper_executor_wasm_common::error::{
2    CALLEE_GAS_DEPLETED, CALLEE_NOT_CALLABLE, CALLEE_REVERTED, CALLEE_TRAPPED,
3};
4
5use crate::{
6    abi::{CasperABI, Declaration, Definition, EnumVariant},
7    prelude::fmt,
8    serializers::borsh::{BorshDeserialize, BorshSerialize},
9};
10
11pub type Address = [u8; 32];
12pub use bnum::types::U256;
13
14// Keep in sync with [`casper_executor_wasm_common::error::CallError`].
15#[derive(Debug, Copy, Clone, PartialEq, Eq, BorshSerialize, BorshDeserialize)]
16#[borsh(crate = "crate::serializers::borsh")]
17pub enum CallError {
18    CalleeReverted,
19    CalleeTrapped,
20    CalleeGasDepleted,
21    NotCallable,
22}
23
24impl fmt::Display for CallError {
25    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
26        match self {
27            CallError::CalleeReverted => write!(f, "callee reverted"),
28            CallError::CalleeTrapped => write!(f, "callee trapped"),
29            CallError::CalleeGasDepleted => write!(f, "callee gas depleted"),
30            CallError::NotCallable => write!(f, "not callable"),
31        }
32    }
33}
34
35impl TryFrom<u32> for CallError {
36    type Error = ();
37
38    fn try_from(value: u32) -> Result<Self, Self::Error> {
39        match value {
40            CALLEE_REVERTED => Ok(Self::CalleeReverted),
41            CALLEE_TRAPPED => Ok(Self::CalleeTrapped),
42            CALLEE_GAS_DEPLETED => Ok(Self::CalleeGasDepleted),
43            CALLEE_NOT_CALLABLE => Ok(Self::NotCallable),
44            _ => Err(()),
45        }
46    }
47}
48
49impl CasperABI for CallError {
50    fn populate_definitions(_definitions: &mut crate::abi::Definitions) {}
51
52    fn declaration() -> Declaration {
53        "CallError".into()
54    }
55
56    fn definition() -> Definition {
57        Definition::Enum {
58            items: vec![
59                EnumVariant {
60                    name: "CalleeReverted".into(),
61                    discriminant: 0,
62                    decl: <()>::declaration(),
63                },
64                EnumVariant {
65                    name: "CalleeTrapped".into(),
66                    discriminant: 1,
67                    decl: <()>::declaration(),
68                },
69                EnumVariant {
70                    name: "CalleeGasDepleted".into(),
71                    discriminant: 2,
72                    decl: <()>::declaration(),
73                },
74                EnumVariant {
75                    name: "CodeNotFound".into(),
76                    discriminant: 3,
77                    decl: <()>::declaration(),
78                },
79            ],
80        }
81    }
82}