canic_core/spec/icrc/icrc21/
mod.rs1mod errors;
10
11pub use errors::*;
12
13use crate::spec::prelude::*;
14
15#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
20pub struct ConsentInfo {
21 pub consent_message: ConsentMessage,
22 pub metadata: ConsentMessageMetadata,
23}
24
25#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
30pub enum ConsentMessage {
31 GenericDisplayMessage(String),
32 FieldsDisplayMessage(FieldsDisplay),
33}
34
35#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
40pub struct ConsentMessageMetadata {
41 pub language: String,
42 pub utc_offset_minutes: Option<i16>,
43}
44
45#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
50pub struct ConsentMessageRequest {
51 pub method: String,
52 pub arg: Vec<u8>,
53 pub user_preferences: ConsentMessageSpec,
54}
55
56#[derive(CandidType, Deserialize)]
62pub enum ConsentMessageResponse {
63 Ok(ConsentInfo),
64 Err(Icrc21Error),
65}
66
67#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
72pub struct ConsentMessageSpec {
73 pub metadata: ConsentMessageMetadata,
74 pub device_spec: Option<DisplayMessageType>,
75}
76
77#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
82pub enum DisplayMessageType {
83 GenericDisplay,
84 FieldsDisplay,
85}
86
87#[derive(CandidType, Clone, Debug, Default, Deserialize, Eq, PartialEq)]
92pub struct FieldsDisplay {
93 pub intent: String,
94 pub fields: Vec<(String, Value)>,
95}
96
97#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
102pub enum Value {
103 TokenAmount {
104 decimals: u8,
105 amount: u64,
106 symbol: String,
107 },
108 TimestampSeconds {
109 amount: u64,
110 },
111 DurationSeconds {
112 amount: u64,
113 },
114 Text {
115 content: String,
116 },
117}