ic_query/icrc/model/reports/ledger/
mod.rs1use crate::icrc::{IcrcIndexData, IcrcTokenData, IcrcTokenStandardRow};
8use serde::Serialize;
9use serde_json::Value as JsonValue;
10
11#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
18pub struct IcrcTokenReport {
19 #[serde(flatten)]
21 pub provenance: super::IcrcReportProvenance,
22 #[serde(flatten)]
24 pub token: IcrcTokenData,
25}
26
27#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
34pub struct IcrcIndexReport {
35 #[serde(flatten)]
37 pub provenance: super::IcrcReportProvenance,
38 pub index: IcrcIndexData,
40}
41
42#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
49pub struct IcrcTransactionsData {
50 pub log_length: Option<String>,
53 pub blocks: Vec<IcrcTransactionBlockRow>,
55 pub archived_blocks: Vec<IcrcArchivedBlocksRow>,
57 pub followed_archive_blocks: Vec<IcrcFollowedArchiveBlockRow>,
59 pub archive_follow_errors: Vec<IcrcArchiveFollowErrorRow>,
61}
62
63#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
70pub struct IcrcTransactionsReport {
71 #[serde(flatten)]
73 pub provenance: super::IcrcReportProvenance,
74 pub requested_start: String,
75 pub requested_limit: u32,
76 pub follow_archives: bool,
77 #[serde(flatten)]
79 pub transactions: IcrcTransactionsData,
80}
81
82#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
89pub struct IcrcBlockTypesReport {
90 #[serde(flatten)]
92 pub provenance: super::IcrcReportProvenance,
93 pub block_types: Vec<IcrcBlockTypeRow>,
94}
95
96#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
103pub struct IcrcArchivesReport {
104 #[serde(flatten)]
106 pub provenance: super::IcrcReportProvenance,
107 pub from_canister_id: Option<String>,
108 pub archives: Vec<IcrcArchiveRow>,
109}
110
111#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
118pub struct IcrcTipCertificateReport {
119 #[serde(flatten)]
121 pub provenance: super::IcrcReportProvenance,
122 pub certificate: Option<IcrcTipCertificateEvidence>,
124}
125
126#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
133pub struct IcrcTipCertificateEvidence {
134 pub certificate_hex: String,
136 pub certificate_bytes: usize,
138 pub hash_tree_hex: String,
140 pub hash_tree_bytes: usize,
142}
143
144#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
151pub struct IcrcCapabilitiesReport {
152 #[serde(flatten)]
154 pub provenance: super::IcrcReportProvenance,
155 pub supported_standards: Vec<IcrcTokenStandardRow>,
156 pub capabilities: Vec<IcrcCapabilityRow>,
157}
158
159#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
166pub struct IcrcCapabilityRow {
167 pub capability: String,
168 pub method: String,
169 pub status: IcrcCapabilityStatus,
170 pub details: Option<String>,
171 pub error: Option<String>,
172}
173
174#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize)]
181#[serde(rename_all = "snake_case")]
182pub enum IcrcCapabilityStatus {
183 Available,
185 Unsupported,
187 Error,
189}
190
191impl IcrcCapabilityStatus {
192 #[must_use]
194 pub const fn as_str(self) -> &'static str {
195 match self {
196 Self::Available => "available",
197 Self::Unsupported => "unsupported",
198 Self::Error => "error",
199 }
200 }
201}
202
203#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
210pub struct IcrcTransactionBlockRow {
211 pub index: String,
212 pub block_type: Option<String>,
213 pub transaction_kind: Option<String>,
214 pub timestamp_unix_nanos: Option<String>,
215 pub amount_base_units: Option<String>,
216 pub raw_block: JsonValue,
217}
218
219#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
226pub struct IcrcArchivedBlocksRow {
227 pub callback_canister_id: String,
228 pub callback_method: String,
229 pub ranges: Vec<IcrcArchivedRangeRow>,
230}
231
232#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
239pub struct IcrcArchivedRangeRow {
240 pub start: String,
241 pub length: String,
242}
243
244#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
251pub struct IcrcFollowedArchiveBlockRow {
252 pub archive_canister_id: String,
253 pub callback_method: String,
254 #[serde(flatten)]
256 pub block: IcrcTransactionBlockRow,
257}
258
259#[cfg(test)]
260mod tests;
261
262#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
269pub struct IcrcArchiveFollowErrorRow {
270 pub callback_canister_id: String,
271 pub callback_method: String,
272 pub ranges: Vec<IcrcArchivedRangeRow>,
273 pub error: String,
274}
275
276#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
283pub struct IcrcBlockTypeRow {
284 pub block_type: String,
285 pub url: String,
286}
287
288#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
295pub struct IcrcArchiveRow {
296 pub canister_id: String,
297 pub start: String,
298 pub end: String,
299}