whisky_provider/blockfrost/models/
asset.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
4pub struct AssetAddresses {
5    /// Address containing the specific asset
6    #[serde(rename = "address")]
7    pub address: String,
8    /// Asset quantity on the specific address
9    #[serde(rename = "quantity")]
10    pub quantity: String,
11}
12
13#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
14pub struct BlockfrostAsset {
15    /// Hex-encoded asset full name
16    #[serde(rename = "asset")]
17    pub asset: String,
18    /// Policy ID of the asset
19    #[serde(rename = "policy_id")]
20    pub policy_id: String,
21    /// Hex-encoded asset name of the asset
22    #[serde(rename = "asset_name", deserialize_with = "Option::deserialize")]
23    pub asset_name: Option<String>,
24    /// CIP14 based user-facing fingerprint
25    #[serde(rename = "fingerprint")]
26    pub fingerprint: String,
27    /// Current asset quantity
28    #[serde(rename = "quantity")]
29    pub quantity: String,
30    /// ID of the initial minting transaction
31    #[serde(rename = "initial_mint_tx_hash")]
32    pub initial_mint_tx_hash: String,
33    /// Count of mint and burn transactions
34    #[serde(rename = "mint_or_burn_count")]
35    pub mint_or_burn_count: i32,
36    /// On-chain metadata which SHOULD adhere to the valid standards, based on which we perform the look up and display the asset (best effort)
37    #[serde(rename = "onchain_metadata", deserialize_with = "Option::deserialize")]
38    pub onchain_metadata: Option<std::collections::HashMap<String, serde_json::Value>>,
39    /// If on-chain metadata passes validation, we display the standard under which it is valid
40    pub onchain_metadata_standard: Option<Option<OnchainMetadataStandard>>,
41    /// Arbitrary plutus data (CIP68).
42    pub onchain_metadata_extra: Option<Option<String>>,
43    #[serde(rename = "metadata", deserialize_with = "Option::deserialize")]
44    pub metadata: Option<Box<AssetMetadata>>,
45}
46
47#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
48pub enum OnchainMetadataStandard {
49    #[serde(rename = "CIP25v1")]
50    Cip25v1,
51    #[serde(rename = "CIP25v2")]
52    Cip25v2,
53    #[serde(rename = "CIP68v1")]
54    Cip68v1,
55    #[serde(rename = "CIP68v2")]
56    Cip68v2,
57    #[serde(rename = "CIP68v3")]
58    Cip68v3,
59}
60
61impl Default for OnchainMetadataStandard {
62    fn default() -> OnchainMetadataStandard {
63        Self::Cip25v1
64    }
65}
66
67/// AssetMetadata : Off-chain metadata fetched from GitHub based on network. Mainnet: https://github.com/cardano-foundation/cardano-token-registry/ Testnet: https://github.com/input-output-hk/metadata-registry-testnet/
68#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
69pub struct AssetMetadata {
70    /// Asset name
71    #[serde(rename = "name")]
72    pub name: String,
73    /// Asset description
74    #[serde(rename = "description")]
75    pub description: String,
76    #[serde(rename = "ticker", deserialize_with = "Option::deserialize")]
77    pub ticker: Option<String>,
78    /// Asset website
79    #[serde(rename = "url", deserialize_with = "Option::deserialize")]
80    pub url: Option<String>,
81    /// Base64 encoded logo of the asset
82    #[serde(rename = "logo", deserialize_with = "Option::deserialize")]
83    pub logo: Option<String>,
84    /// Number of decimal places of the asset unit
85    #[serde(rename = "decimals", deserialize_with = "Option::deserialize")]
86    pub decimals: Option<i32>,
87}
88
89#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
90pub struct AssetPolicy {
91    /// Concatenation of the policy_id and hex-encoded asset_name
92    #[serde(rename = "asset")]
93    pub asset: String,
94    /// Current asset quantity
95    #[serde(rename = "quantity")]
96    pub quantity: String,
97}