testnumbat_wasm/api/
call_value_api.rs1use super::{ErrorApi, ManagedTypeApi};
2use crate::{
3 err_msg,
4 types::{BigUint, DcdtTokenPayment, DcdtTokenType, ManagedVec, TokenIdentifier},
5};
6
7pub trait CallValueApi: ManagedTypeApi + ErrorApi + Sized {
8 fn check_not_payable(&self);
9
10 fn rewa_value(&self) -> BigUint<Self>;
13
14 fn dcdt_value(&self) -> BigUint<Self>;
17
18 fn token(&self) -> TokenIdentifier<Self>;
24
25 fn dcdt_token_nonce(&self) -> u64;
28
29 fn dcdt_token_type(&self) -> DcdtTokenType;
32
33 fn require_rewa(&self) -> BigUint<Self> {
37 if !self.token().is_rewa() {
38 self.signal_error(err_msg::NON_PAYABLE_FUNC_DCDT);
39 }
40 self.rewa_value()
41 }
42
43 fn require_dcdt(&self, token: &[u8]) -> BigUint<Self> {
47 if self.token().as_managed_buffer() != token {
48 self.signal_error(err_msg::BAD_TOKEN_PROVIDED);
49 }
50 self.dcdt_value()
51 }
52
53 fn payment_token_pair(&self) -> (BigUint<Self>, TokenIdentifier<Self>) {
58 let token = self.token();
59 if token.is_rewa() {
60 (self.rewa_value(), token)
61 } else {
62 (self.dcdt_value(), token)
63 }
64 }
65
66 fn dcdt_num_transfers(&self) -> usize;
67
68 fn dcdt_value_by_index(&self, index: usize) -> BigUint<Self>;
69
70 fn token_by_index(&self, index: usize) -> TokenIdentifier<Self>;
71
72 fn dcdt_token_nonce_by_index(&self, index: usize) -> u64;
73
74 fn dcdt_token_type_by_index(&self, index: usize) -> DcdtTokenType;
75
76 fn get_all_dcdt_transfers(&self) -> ManagedVec<Self, DcdtTokenPayment<Self>> {
77 let num_transfers = self.dcdt_num_transfers();
78 let mut transfers = ManagedVec::new(self.clone());
79
80 for i in 0..num_transfers {
81 let token_type = self.dcdt_token_type_by_index(i);
82 let token_identifier = self.token_by_index(i);
83 let token_nonce = self.dcdt_token_nonce_by_index(i);
84 let amount = self.dcdt_value_by_index(i);
85
86 transfers.push(DcdtTokenPayment::<Self> {
87 token_type,
88 token_identifier,
89 token_nonce,
90 amount,
91 });
92 }
93
94 transfers
95 }
96}