multiversx_chain_core/types/flags/
esdt_token_type.rs

1use crate::codec::{
2    self,
3    derive::{NestedDecode, NestedEncode, TopDecode, TopEncode},
4};
5
6#[derive(TopDecode, TopEncode, NestedDecode, NestedEncode, Clone, Copy, PartialEq, Eq, Debug)]
7pub enum EsdtTokenType {
8    Fungible = 0,
9    NonFungible = 1,
10    NonFungibleV2 = 2,
11    SemiFungible = 3,
12    MetaFungible = 4,
13    DynamicNFT = 5,
14    DynamicSFT = 6,
15    DynamicMeta = 7,
16    Invalid,
17}
18
19impl EsdtTokenType {
20    pub fn based_on_token_nonce(token_nonce: u64) -> Self {
21        if token_nonce == 0 {
22            EsdtTokenType::Fungible
23        } else {
24            EsdtTokenType::NonFungible
25        }
26    }
27
28    pub fn as_u8(&self) -> u8 {
29        match self {
30            EsdtTokenType::Fungible => 0,
31            EsdtTokenType::NonFungible => 1,
32            EsdtTokenType::NonFungibleV2 => 2,
33            EsdtTokenType::SemiFungible => 3,
34            EsdtTokenType::MetaFungible => 4,
35            EsdtTokenType::DynamicNFT => 5,
36            EsdtTokenType::DynamicSFT => 6,
37            EsdtTokenType::DynamicMeta => 7,
38            EsdtTokenType::Invalid => 255,
39        }
40    }
41
42    pub fn collection_from_string(token_type: &str) -> Self {
43        match token_type {
44            "NonFungibleESDT" => EsdtTokenType::NonFungibleV2,
45            "SemiFungibleESDT" => EsdtTokenType::SemiFungible,
46            "MetaESDT" => EsdtTokenType::MetaFungible,
47            "DynamicNonFungibleESDT" => EsdtTokenType::DynamicNFT,
48            "DynamicSemiFungibleESDT" => EsdtTokenType::DynamicSFT,
49            "DynamicMetaESDT" => EsdtTokenType::DynamicMeta,
50            _ => EsdtTokenType::Invalid,
51        }
52    }
53}
54
55impl From<u8> for EsdtTokenType {
56    #[inline]
57    fn from(value: u8) -> Self {
58        match value {
59            0 => EsdtTokenType::Fungible,
60            1 => EsdtTokenType::NonFungible,
61            2 => EsdtTokenType::NonFungibleV2,
62            3 => EsdtTokenType::SemiFungible,
63            4 => EsdtTokenType::MetaFungible,
64            5 => EsdtTokenType::DynamicNFT,
65            6 => EsdtTokenType::DynamicSFT,
66            7 => EsdtTokenType::DynamicMeta,
67            _ => EsdtTokenType::Invalid,
68        }
69    }
70}