use candid::{CandidType, Deserialize, Principal};
pub use ic_cycles_ledger_client::Account;
use crate::caller::TokenAmount;
#[derive(Debug, CandidType, Deserialize, Copy, Clone, Eq, PartialEq)]
#[non_exhaustive]
pub enum PaymentOption {
AttachedCycles { fee: Option<TokenAmount> },
CallerPaysIcrc2Cycles { fee: Option<TokenAmount> },
PatronPaysIcrc2Cycles { fee: Option<TokenAmount> },
}
#[derive(Debug, CandidType, Deserialize, Clone, Eq, PartialEq)]
pub struct Icrc2Payer {
pub account: Option<Account>,
pub spender_subaccount: Option<serde_bytes::ByteBuf>,
pub ledger_canister_id: Option<Principal>,
pub created_at_time: Option<TokenAmount>,
}