dpp/tokens/token_payment_info/methods/v0/
mod.rs

1use crate::balances::credits::TokenAmount;
2use crate::data_contract::TokenContractPosition;
3use crate::tokens::calculate_token_id;
4use crate::tokens::token_payment_info::v0::v0_accessors::TokenPaymentInfoAccessorsV0;
5use platform_value::Identifier;
6
7pub trait TokenPaymentInfoMethodsV0: TokenPaymentInfoAccessorsV0 {
8    fn is_valid_for_required_cost(&self, required_cost: TokenAmount) -> bool {
9        if let Some(min_cost) = self.minimum_token_cost() {
10            if required_cost < min_cost {
11                return false;
12            }
13        }
14
15        if let Some(max_cost) = self.maximum_token_cost() {
16            if required_cost > max_cost {
17                return false;
18            }
19        }
20
21        true
22    }
23
24    fn matches_token_contract(
25        &self,
26        contract_id: &Option<Identifier>,
27        token_contract_position: TokenContractPosition,
28    ) -> bool {
29        self.payment_token_contract_id_ref() == contract_id
30            && self.token_contract_position() == token_contract_position
31    }
32
33    fn token_id(&self, current_contract_id: Identifier) -> Identifier {
34        calculate_token_id(
35            self.payment_token_contract_id()
36                .unwrap_or(current_contract_id)
37                .as_bytes(),
38            self.token_contract_position(),
39        )
40        .into()
41    }
42}