multiversx_sc_modules/token_merge/
custom_merged_token_attributes.rs1multiversx_sc::imports!();
2
3use core::marker::PhantomData;
4
5use multiversx_sc::codec::Empty;
6
7use super::merged_token_instances::MergedTokenInstances;
8
9pub trait AllMergeScTraits:
10 super::merged_token_setup::MergedTokenSetupModule
11 + crate::default_issue_callbacks::DefaultIssueCallbacksModule
12 + crate::pause::PauseModule
13{
14}
15
16impl<T> AllMergeScTraits for T where
17 T: super::merged_token_setup::MergedTokenSetupModule
18 + crate::default_issue_callbacks::DefaultIssueCallbacksModule
19 + crate::pause::PauseModule
20{
21}
22
23pub trait MergedTokenAttributesCreator {
24 type ScType: AllMergeScTraits;
25 type AttributesType: TopEncode + TopDecode;
26
27 fn get_merged_token_attributes(
28 &self,
29 sc: &Self::ScType,
30 merged_token_id: &TokenIdentifier<<Self::ScType as ContractBase>::Api>,
31 merged_token_raw_attributes: &MergedTokenInstances<<Self::ScType as ContractBase>::Api>,
32 ) -> Self::AttributesType;
33}
34
35pub struct DefaultMergedAttributesWrapper<Sc: AllMergeScTraits> {
36 _phantom: PhantomData<Sc>,
37}
38
39impl<Sc> DefaultMergedAttributesWrapper<Sc>
40where
41 Sc: AllMergeScTraits,
42{
43 #[inline]
44 pub fn new() -> Self {
45 Self {
46 _phantom: PhantomData,
47 }
48 }
49}
50
51impl<Sc> Default for DefaultMergedAttributesWrapper<Sc>
52where
53 Sc: AllMergeScTraits,
54{
55 fn default() -> Self {
56 Self::new()
57 }
58}
59
60impl<Sc> MergedTokenAttributesCreator for DefaultMergedAttributesWrapper<Sc>
61where
62 Sc: AllMergeScTraits,
63{
64 type ScType = Sc;
65 type AttributesType = Empty;
66
67 fn get_merged_token_attributes(
68 &self,
69 _sc: &Self::ScType,
70 _merged_token_id: &TokenIdentifier<<Self::ScType as ContractBase>::Api>,
71 _merged_token_raw_attributes: &MergedTokenInstances<<Self::ScType as ContractBase>::Api>,
72 ) -> Self::AttributesType {
73 Empty
74 }
75}