canic_cdk/spec/standards/icrc/
icrc2.rs

1use crate::spec::prelude::*;
2
3///
4/// Allowance
5///
6
7#[derive(CandidType, Deserialize)]
8pub struct Allowance {
9    pub allowance: u64,
10    pub expires_at: Option<u64>,
11}
12
13///
14/// AllowanceArgs
15/// wrapped to use the canic Account
16///
17
18#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
19pub struct AllowanceArgs {
20    pub account: Account,
21    pub spender: Account,
22}
23
24///
25/// TransferFromArgs
26/// transfer_from() arguments
27///
28
29#[derive(CandidType, Serialize)]
30pub struct TransferFromArgs {
31    pub from: Account,
32    pub to: Account,
33    pub amount: u64,
34    pub memo: Option<Vec<u8>>,
35    pub created_at_time: Option<u64>,
36}
37
38///
39/// TransferFromResult
40///
41
42#[derive(CandidType, Deserialize)]
43pub enum TransferFromResult {
44    #[serde(rename = "Ok")]
45    Ok(u64), // Transaction index
46    #[serde(rename = "Err")]
47    Err(TransferFromError),
48}
49
50///
51/// TransferFromError
52///
53
54#[derive(CandidType, Debug, Deserialize)]
55pub enum TransferFromError {
56    BadFee { expected_fee: u64 },
57    BadBurn { min_burn_amount: u64 },
58    InsufficientFunds { balance: u64 },
59    InsufficientAllowance { allowance: u64 },
60    TooOld,
61    CreatedInFuture { ledger_time: u64 },
62    Duplicate { duplicate_of: u64 },
63    TemporarilyUnavailable,
64    GenericError { error_code: u64, message: String },
65}