multiversx_sc/types/managed/wrapped/token/
esdt_token_data.rs1use 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; use 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()) }
54
55 pub fn decode_attributes<T: TopDecode>(&self) -> T {
56 T::top_decode_or_handle_err(
57 self.attributes.clone(), ExitCodecErrorHandler::<M>::from(DECODE_ATTRIBUTE_ERROR_PREFIX),
59 )
60 .unwrap_infallible()
61 }
62}