multiversx_chain_core/types/flags/
esdt_token_type.rs1use 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}