multiversx_sc/types/managed/wrapped/token/
esdt_token_data.rs

1use multiversx_sc_derive::ManagedVecItem;
2use unwrap_infallible::UnwrapInfallible;
3
4use crate::{
5    api::ManagedTypeApi,
6    codec,
7    codec::{
8        derive::{NestedDecode, NestedEncode, TopDecode, TopEncode},
9        *,
10    },
11    contract_base::ExitCodecErrorHandler,
12    types::{BigUint, EsdtTokenType, ManagedAddress, ManagedBuffer, ManagedVec},
13};
14
15use crate as multiversx_sc; // needed by the TypeAbi generated code
16use crate::derive::type_abi;
17
18const DECODE_ATTRIBUTE_ERROR_PREFIX: &str = "error decoding ESDT attributes: ";
19
20#[type_abi]
21#[derive(Clone, TopDecode, TopEncode, NestedDecode, NestedEncode, Debug, ManagedVecItem)]
22pub struct EsdtTokenData<M: ManagedTypeApi> {
23    pub token_type: EsdtTokenType,
24    pub amount: BigUint<M>,
25    pub frozen: bool,
26    pub hash: ManagedBuffer<M>,
27    pub name: ManagedBuffer<M>,
28    pub attributes: ManagedBuffer<M>,
29    pub creator: ManagedAddress<M>,
30    pub royalties: BigUint<M>,
31    pub uris: ManagedVec<M, ManagedBuffer<M>>,
32}
33
34impl<M: ManagedTypeApi> Default for EsdtTokenData<M> {
35    fn default() -> Self {
36        EsdtTokenData {
37            token_type: EsdtTokenType::Fungible,
38            amount: BigUint::zero(),
39            frozen: false,
40            hash: ManagedBuffer::new(),
41            name: ManagedBuffer::new(),
42            attributes: ManagedBuffer::new(),
43            creator: ManagedAddress::zero(),
44            royalties: BigUint::zero(),
45            uris: ManagedVec::new(),
46        }
47    }
48}
49
50impl<M: ManagedTypeApi> EsdtTokenData<M> {
51    pub fn try_decode_attributes<T: TopDecode>(&self) -> Result<T, DecodeError> {
52        T::top_decode(self.attributes.clone()) // TODO: remove clone
53    }
54
55    pub fn decode_attributes<T: TopDecode>(&self) -> T {
56        T::top_decode_or_handle_err(
57            self.attributes.clone(), // TODO: remove clone
58            ExitCodecErrorHandler::<M>::from(DECODE_ATTRIBUTE_ERROR_PREFIX),
59        )
60        .unwrap_infallible()
61    }
62}