Skip to main content

ic_papi_guard/guards/
attached_cycles.rs

1use super::{PaymentError, PaymentGuardTrait};
2use ic_cdk::api::call::{msg_cycles_accept, msg_cycles_available};
3use ic_papi_api::caller::TokenAmount;
4
5/// The information required to charge attached cycles.
6#[derive(Default, Debug, Eq, PartialEq)]
7pub struct AttachedCyclesPayment {}
8
9impl PaymentGuardTrait for AttachedCyclesPayment {
10    async fn deduct(&self, fee: TokenAmount) -> Result<(), PaymentError> {
11        let available = msg_cycles_available();
12        if available < fee {
13            return Err(PaymentError::InsufficientFunds {
14                needed: fee,
15                available,
16            });
17        }
18        msg_cycles_accept(fee);
19        Ok(())
20    }
21}