canic_core/dto/icrc21/
mod.rs1mod errors;
12
13pub use errors::*;
14
15use crate::dto::prelude::*;
16
17#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
22pub struct ConsentInfo {
23 pub consent_message: ConsentMessage,
24 pub metadata: ConsentMessageMetadata,
25}
26
27#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
32pub enum ConsentMessage {
33 GenericDisplayMessage(String),
34 FieldsDisplayMessage(FieldsDisplay),
35}
36
37#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
42pub struct ConsentMessageMetadata {
43 pub language: String,
44 pub utc_offset_minutes: Option<i16>,
45}
46
47#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
52pub struct ConsentMessageRequest {
53 pub method: String,
54 pub arg: Vec<u8>,
55 pub user_preferences: ConsentMessageSpec,
56}
57
58#[derive(CandidType, Deserialize)]
64pub enum ConsentMessageResponse {
65 Ok(ConsentInfo),
66 Err(Icrc21Error),
67}
68
69impl From<Result<ConsentInfo, Icrc21Error>> for ConsentMessageResponse {
70 fn from(res: Result<ConsentInfo, Icrc21Error>) -> Self {
71 match res {
72 Ok(info) => Self::Ok(info),
73 Err(err) => Self::Err(err),
74 }
75 }
76}
77
78#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
83pub struct ConsentMessageSpec {
84 pub metadata: ConsentMessageMetadata,
85 pub device_spec: Option<DisplayMessageType>,
86}
87
88#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
93pub enum DisplayMessageType {
94 GenericDisplay,
95 FieldsDisplay,
96}
97
98#[derive(CandidType, Clone, Debug, Default, Deserialize, Eq, PartialEq)]
103pub struct FieldsDisplay {
104 pub intent: String,
105 pub fields: Vec<(String, Value)>,
106}
107
108#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
113pub enum Value {
114 TokenAmount {
115 decimals: u8,
116 amount: u64,
117 symbol: String,
118 },
119 TimestampSeconds {
120 amount: u64,
121 },
122 DurationSeconds {
123 amount: u64,
124 },
125 Text {
126 content: String,
127 },
128}