dpp/tokens/token_payment_info/methods/v0/
mod.rs1use 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}