whisky_common/models/
asset_metadata.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
4#[serde(rename_all = "camelCase")]
5pub struct RoyaltiesStandard {
6    pub rate: String,
7    pub address: String,
8}
9
10pub const ROYALTIES_STANDARD_KEYS: &[&str] = &["rate", "address"];
11
12#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
13#[serde(untagged)]
14pub enum AssetMetadata {
15    FungibleAssetMetadata(FungibleAssetMetadata),
16    NonFungibleAssetMetadata(NonFungibleAssetMetadata),
17    Royalties(RoyaltiesStandard),
18}
19
20#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
21#[serde(rename_all = "camelCase")]
22pub struct FungibleAssetMetadata {
23    pub ticker: String,
24    pub decimals: u32,
25    pub version: String,
26}
27
28pub const FUNGIBLE_ASSET_KEYS: &[&str] = &["ticker", "decimals"];
29
30#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
31#[serde(tag = "type", content = "data")]
32pub enum NonFungibleAssetMetadata {
33    Audio(AudioAssetMetadata),
34    Image(ImageAssetMetadata),
35    Smart(SmartAssetMetadata),
36    Video(VideoAssetMetadata),
37}
38
39#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
40#[serde(rename_all = "camelCase")]
41pub struct AudioAssetMetadata {
42    pub files: Option<Vec<File>>,
43}
44
45#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
46#[serde(rename_all = "camelCase")]
47pub struct ImageAssetMetadata {
48    pub files: Option<Vec<File>>,
49    pub artists: Option<Vec<Artist>>,
50    pub attributes: Option<std::collections::HashMap<String, String>>,
51    pub traits: Option<Vec<String>>,
52}
53
54#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
55#[serde(rename_all = "camelCase")]
56pub struct SmartAssetMetadata {
57    pub files: Option<Vec<File>>,
58}
59
60#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
61#[serde(rename_all = "camelCase")]
62pub struct VideoAssetMetadata {
63    pub files: Option<Vec<File>>,
64}
65
66#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
67#[serde(rename_all = "camelCase")]
68pub struct File {
69    pub name: String,
70    pub src: String,
71    pub media_type: String,
72}
73
74#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
75#[serde(rename_all = "camelCase")]
76pub struct Artist {
77    pub name: String,
78    pub twitter: Option<String>,
79}
80
81pub const METADATA_STANDARD_KEYS: &[&str] = &[
82    "name",
83    "image",
84    "mediaType",
85    "description",
86    "instagram",
87    "twitter",
88    "discord",
89    "website",
90];