Skip to main content

ic_query/sns/report/model/reports/
token.rs

1//! Module: sns::report::model::reports::token
2//!
3//! Responsibility: SNS token metadata report DTOs.
4//! Does not own: ledger calls, token amount formatting, or rendering.
5//! Boundary: preserves raw token metadata fields for text and JSON output.
6
7use crate::icrc::IcrcMetadataValueKind;
8use serde::Serialize;
9use serde_json::Value as JsonValue;
10
11///
12/// SnsTokenReport
13///
14/// Serializable report for SNS ledger token metadata.
15///
16
17#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
18pub struct SnsTokenReport {
19    pub schema_version: u32,
20    pub network: String,
21    pub sns_wasm_canister_id: String,
22    pub fetched_at: String,
23    pub source_endpoint: String,
24    pub fetched_by: String,
25    pub id: usize,
26    pub name: String,
27    pub root_canister_id: String,
28    pub ledger_canister_id: String,
29    pub sns_index_canister_id: String,
30    pub token_name: String,
31    pub token_symbol: String,
32    pub decimals: u8,
33    pub transfer_fee: String,
34    pub total_supply: String,
35    pub minting_account_owner: Option<String>,
36    pub minting_account_subaccount_hex: Option<String>,
37    pub ledger_index_canister_id: Option<String>,
38    pub ledger_index_error: Option<String>,
39    pub supported_standards: Vec<SnsTokenStandardRow>,
40    pub metadata: Vec<SnsTokenMetadataRow>,
41}
42
43///
44/// SnsTokenStandardRow
45///
46/// Serializable row for one token standard supported by an SNS ledger.
47///
48
49#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
50pub struct SnsTokenStandardRow {
51    pub name: String,
52    pub url: String,
53}
54
55///
56/// SnsTokenMetadataRow
57///
58/// Serializable row for one raw SNS ledger metadata entry.
59///
60
61#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
62pub struct SnsTokenMetadataRow {
63    pub key: String,
64    pub value_type: IcrcMetadataValueKind,
65    pub value: JsonValue,
66}