Skip to main content

blockfrost_openapi/models/
asset.rs

1use crate::models;
2use serde::{Deserialize, Serialize};
3
4#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
5pub struct Asset {
6    /// Hex-encoded asset full name
7    #[serde(rename = "asset")]
8    pub asset: String,
9    /// Policy ID of the asset
10    #[serde(rename = "policy_id")]
11    pub policy_id: String,
12    /// Hex-encoded asset name of the asset
13    #[serde(rename = "asset_name", deserialize_with = "Option::deserialize")]
14    pub asset_name: Option<String>,
15    /// CIP14 based user-facing fingerprint
16    #[serde(rename = "fingerprint")]
17    pub fingerprint: String,
18    /// Current asset quantity
19    #[serde(rename = "quantity")]
20    pub quantity: String,
21    /// ID of the initial minting transaction
22    #[serde(rename = "initial_mint_tx_hash")]
23    pub initial_mint_tx_hash: String,
24    /// Count of mint and burn transactions
25    #[serde(rename = "mint_or_burn_count")]
26    pub mint_or_burn_count: i32,
27    /// On-chain metadata which SHOULD adhere to the valid standards, based on which we perform the look up and display the asset (best effort) 
28    #[serde(rename = "onchain_metadata", deserialize_with = "Option::deserialize")]
29    pub onchain_metadata: Option<std::collections::HashMap<String, serde_json::Value>>,
30    /// If on-chain metadata passes validation, we display the standard under which it is valid 
31    #[serde(rename = "onchain_metadata_standard", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
32    pub onchain_metadata_standard: Option<Option<OnchainMetadataStandard>>,
33    /// Arbitrary plutus data (CIP68). 
34    #[serde(rename = "onchain_metadata_extra", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
35    pub onchain_metadata_extra: Option<Option<String>>,
36    #[serde(rename = "metadata", deserialize_with = "Option::deserialize")]
37    pub metadata: Option<Box<models::AssetMetadata>>,
38}
39
40impl Asset {
41    pub fn new(asset: String, policy_id: String, asset_name: Option<String>, fingerprint: String, quantity: String, initial_mint_tx_hash: String, mint_or_burn_count: i32, onchain_metadata: Option<std::collections::HashMap<String, serde_json::Value>>, metadata: Option<models::AssetMetadata>) -> Asset {
42        Asset {
43            asset,
44            policy_id,
45            asset_name,
46            fingerprint,
47            quantity,
48            initial_mint_tx_hash,
49            mint_or_burn_count,
50            onchain_metadata,
51            onchain_metadata_standard: None,
52            onchain_metadata_extra: None,
53            metadata: if let Some(x) = metadata {Some(Box::new(x))} else {None},
54        }
55    }
56}
57/// If on-chain metadata passes validation, we display the standard under which it is valid 
58#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
59pub enum OnchainMetadataStandard {
60    #[serde(rename = "CIP25v1")]
61    Cip25v1,
62    #[serde(rename = "CIP25v2")]
63    Cip25v2,
64    #[serde(rename = "CIP68v1")]
65    Cip68v1,
66    #[serde(rename = "CIP68v2")]
67    Cip68v2,
68    #[serde(rename = "CIP68v3")]
69    Cip68v3,
70}
71
72impl Default for OnchainMetadataStandard {
73    fn default() -> OnchainMetadataStandard {
74        Self::Cip25v1
75    }
76}
77