whisky_common/models/
asset_metadata.rs1use 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];