casper_contract_sdk/
types.rs1use 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#[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}