1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#![cfg_attr(not(feature = "std"), no_std)]

mod account_provider;
mod mint_provider;
mod proof_of_stake_provider;

use core::marker::Sized;

use types::{ApiError, U512};

pub use crate::{
    account_provider::AccountProvider, mint_provider::MintProvider,
    proof_of_stake_provider::ProofOfStakeProvider,
};

pub trait StandardPayment: AccountProvider + MintProvider + ProofOfStakeProvider + Sized {
    fn pay(&mut self, amount: U512) -> Result<(), ApiError> {
        let main_purse = self.get_main_purse()?;
        let payment_purse = self.get_payment_purse()?;
        self.transfer_purse_to_purse(main_purse, payment_purse, amount)
            .map_err(|_| ApiError::Transfer)
    }
}