nft_image_and_metadata_generator/
metadata.rs1#[derive(Debug, Clone)]
10pub struct MetadataHeader {
11 pub collection_name: String,
13 pub symbol: String,
14 pub description: String,
15 seller_fee_basis_points: u32,
16 external_url: String,
17 pub creators: Vec<Creator>,
19}
20
21impl MetadataHeader {
22 pub fn new(
24 collection_name: String,
25 symbol: String,
26 description: String,
27 seller_fee_basis_points: u32,
28 external_url: String,
29 creators: Vec<Creator>,
30 ) -> MetadataHeader {
31 MetadataHeader {
32 collection_name,
33 symbol,
34 description,
35 seller_fee_basis_points,
36 external_url,
37 creators,
38 }
39 }
40}
41
42#[derive(Debug, Clone)]
47pub struct Creator {
48 pub address: String,
50 pub share: u8,
52}
53
54impl Creator {
55 pub fn new(address: String, share: u8) -> Creator {
57 Creator { address, share }
58 }
59}
60
61#[derive(Debug, Clone)]
63pub struct Attributes {
64 trait_type: String,
65 value: String,
66}
67
68impl Attributes {
69 pub fn new(trait_type: String, value: String) -> Attributes {
71 Attributes { trait_type, value }
72 }
73}
74
75#[derive(Debug, Clone)]
77pub struct Properties {
78 files: Vec<Files>,
80 category: String,
81 creators: Vec<Creator>,
82}
83
84impl Properties {
85 pub fn new(files: Vec<Files>, category: String, creators: Vec<Creator>) -> Properties {
86 Properties {
87 files,
88 category,
89 creators,
90 }
91 }
92}
93
94#[derive(Debug, Clone)]
96pub struct Files {
97 uri: String,
98 _type: String,
99}
100
101impl Files {
102 pub fn new(uri: String, _type: String) -> Files {
104 Files { uri, _type }
105 }
106}
107
108pub trait Json {
110 fn to_json(&self) -> json::JsonValue;
112}
113
114impl Json for MetadataHeader {
115 fn to_json(&self) -> json::JsonValue {
116 let mut metadata = json::JsonValue::new_object();
117 metadata["name"] = self.collection_name.clone().into();
118 metadata["symbol"] = self.symbol.clone().into();
119 metadata["description"] = self.description.clone().into();
120 metadata["seller_fee_basis_points"] = self.seller_fee_basis_points.into();
121 metadata["external_url"] = self.external_url.clone().into();
122 let mut creators: Vec<json::JsonValue> = Vec::new();
123 for creator in &self.creators {
124 creators.push(creator.to_json());
125 }
126 metadata["creators"] = creators.into();
127 metadata
128 }
129}
130
131impl Json for Creator {
132 fn to_json(&self) -> json::JsonValue {
133 let mut creator = json::JsonValue::new_object();
134 creator["address"] = self.address.clone().into();
135 creator["share"] = self.share.into();
136 creator
137 }
138}
139
140impl Json for Attributes {
141 fn to_json(&self) -> json::JsonValue {
142 let mut att = json::JsonValue::new_object();
143 att["trait_type"] = self.trait_type.clone().into();
144 att["value"] = self.value.clone().into();
145 att
146 }
147}
148
149impl Json for Properties {
150 fn to_json(&self) -> json::JsonValue {
151 let mut prop = json::JsonValue::new_object();
152 let mut files: Vec<json::JsonValue> = Vec::new();
153 for file in &self.files {
154 files.push(file.to_json());
155 }
156 prop["files"] = files.into();
157 prop["category"] = self.category.clone().into();
158 let mut creators: Vec<json::JsonValue> = Vec::new();
159 for creator in &self.creators {
160 creators.push(creator.to_json());
161 }
162 prop["creators"] = creators.into();
163 prop
164 }
165}
166
167impl Json for Files {
168 fn to_json(&self) -> json::JsonValue {
169 let mut files = json::JsonValue::new_object();
170 files["uri"] = self.uri.clone().into();
171 files["type"] = self._type.clone().into();
172 files
173 }
174}