Skip to main content

multiversx_sc/
abi.rs

1mod build_info_abi;
2mod contract_abi;
3mod endpoint_abi;
4mod esdt_attribute_abi;
5mod event_abi;
6mod type_abi;
7mod type_abi_from;
8mod type_abi_impl_basic;
9mod type_abi_impl_codec_multi;
10mod type_abi_impl_vm_core;
11mod type_abi_universal_input;
12mod type_description;
13mod type_description_container;
14
15#[cfg(feature = "num-bigint")]
16mod type_abi_impl_big_int;
17
18pub use build_info_abi::*;
19pub use contract_abi::*;
20pub use endpoint_abi::*;
21pub use esdt_attribute_abi::EsdtAttributeAbi;
22pub use event_abi::*;
23pub use type_abi::*;
24pub use type_abi_from::*;
25pub use type_abi_universal_input::TypeAbiUniversalInput;
26pub use type_description::*;
27pub use type_description_container::*;
28
29pub type TypeName = alloc::string::String;
30
31#[derive(Clone, Default, Debug, PartialEq, Eq)]
32pub struct TypeNames {
33    pub abi: alloc::string::String,
34    pub rust: alloc::string::String,
35    pub specific: Option<alloc::string::String>,
36}
37
38impl TypeNames {
39    pub const fn new() -> Self {
40        TypeNames {
41            abi: alloc::string::String::new(),
42            rust: alloc::string::String::new(),
43            specific: None,
44        }
45    }
46
47    pub const fn from_abi(abi_name: alloc::string::String) -> Self {
48        TypeNames {
49            abi: abi_name,
50            rust: alloc::string::String::new(),
51            specific: None,
52        }
53    }
54
55    pub fn specific_or_abi(&self) -> &str {
56        self.specific.as_deref().unwrap_or(&self.abi)
57    }
58}