canic_core/spec/icrc/
icrc2.rs

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