1use serde::{Deserialize, Serialize};
2use std::collections::BTreeMap;
3
4pub type ExtraFields = BTreeMap<String, serde_json::Value>;
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct RateLimit {
8 pub limit: u32,
9 pub used: u32,
10 pub remaining: u32,
11}
12
13#[derive(Debug, Clone, Serialize, Deserialize)]
14pub struct ApiResponse<T> {
15 pub data: T,
16 pub rate_limit: Option<RateLimit>,
17}
18
19#[derive(Debug, Clone, Serialize, Deserialize)]
20pub struct Pagination {
21 pub per_page: u32,
22 pub pages: u32,
23 pub page: u32,
24 pub items: u32,
25 #[serde(default)]
26 pub urls: Option<PaginationUrls>,
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize)]
30pub struct PaginationUrls {
31 #[serde(default)]
32 pub first: Option<String>,
33 #[serde(default)]
34 pub prev: Option<String>,
35 #[serde(default)]
36 pub next: Option<String>,
37 #[serde(default)]
38 pub last: Option<String>,
39}
40
41#[derive(Debug, Clone, Serialize, Deserialize)]
42pub struct AboutStatistics {
43 pub releases: u64,
44 pub artists: u64,
45 pub labels: u64,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
49pub struct AboutResponse {
50 pub hello: String,
51 pub api_version: String,
52 pub documentation_url: String,
53 pub statistics: AboutStatistics,
54 #[serde(flatten)]
55 pub extra: ExtraFields,
56}
57
58#[derive(Debug, Clone, Serialize, Deserialize)]
59pub struct Identity {
60 pub id: u64,
61 pub username: String,
62 pub resource_url: String,
63 #[serde(default)]
64 pub consumer_name: Option<String>,
65 #[serde(flatten)]
66 pub extra: ExtraFields,
67}
68
69#[derive(Debug, Clone, Serialize, Deserialize)]
70pub struct Image {
71 pub width: u32,
72 pub height: u32,
73 pub resource_url: String,
74 #[serde(rename = "type")]
75 pub image_type: String,
76 pub uri: String,
77 #[serde(default)]
78 pub uri150: Option<String>,
79 #[serde(flatten)]
80 pub extra: ExtraFields,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize)]
84pub struct UserReference {
85 #[serde(default)]
86 pub id: Option<u64>,
87 pub username: String,
88 pub resource_url: String,
89 #[serde(default)]
90 pub avatar_url: Option<String>,
91 #[serde(flatten)]
92 pub extra: ExtraFields,
93}
94
95#[derive(Debug, Clone, Serialize, Deserialize)]
96pub struct ArtistCredit {
97 #[serde(default)]
98 pub anv: Option<String>,
99 pub id: u64,
100 #[serde(default)]
101 pub join: Option<String>,
102 pub name: String,
103 pub resource_url: String,
104 #[serde(default)]
105 pub role: Option<String>,
106 #[serde(default)]
107 pub tracks: Option<String>,
108 #[serde(flatten)]
109 pub extra: ExtraFields,
110}
111
112#[derive(Debug, Clone, Serialize, Deserialize)]
113pub struct Format {
114 #[serde(default)]
115 pub qty: Option<String>,
116 pub name: String,
117 #[serde(default)]
118 pub descriptions: Option<Vec<String>>,
119 #[serde(flatten)]
120 pub extra: ExtraFields,
121}
122
123#[derive(Debug, Clone, Serialize, Deserialize)]
124pub struct LabelReference {
125 pub resource_url: String,
126 #[serde(default)]
127 pub entity_type: Option<String>,
128 #[serde(default)]
129 pub catno: Option<String>,
130 pub id: u64,
131 pub name: String,
132 #[serde(flatten)]
133 pub extra: ExtraFields,
134}
135
136#[derive(Debug, Clone, Serialize, Deserialize)]
137pub struct Track {
138 #[serde(default)]
139 pub duration: Option<String>,
140 #[serde(default)]
141 pub position: Option<String>,
142 pub title: String,
143 #[serde(rename = "type_", default)]
144 pub track_type: Option<String>,
145 #[serde(default)]
146 pub extraartists: Option<Vec<ArtistCredit>>,
147 #[serde(flatten)]
148 pub extra: ExtraFields,
149}
150
151#[derive(Debug, Clone, Serialize, Deserialize)]
152pub struct Video {
153 #[serde(default)]
154 pub description: Option<String>,
155 #[serde(default)]
156 pub duration: Option<u64>,
157 #[serde(default)]
158 pub embed: Option<bool>,
159 #[serde(default)]
160 pub title: Option<String>,
161 pub uri: String,
162 #[serde(flatten)]
163 pub extra: ExtraFields,
164}
165
166#[derive(Debug, Clone, Serialize, Deserialize)]
167pub struct ArtistMember {
168 pub active: bool,
169 pub id: u64,
170 pub name: String,
171 pub resource_url: String,
172 #[serde(flatten)]
173 pub extra: ExtraFields,
174}
175
176#[derive(Debug, Clone, Serialize, Deserialize)]
177pub struct Artist {
178 pub id: u64,
179 pub name: String,
180 #[serde(default)]
181 pub namevariations: Option<Vec<String>>,
182 #[serde(default)]
183 pub profile: Option<String>,
184 pub resource_url: String,
185 #[serde(default)]
186 pub releases_url: Option<String>,
187 #[serde(default)]
188 pub uri: Option<String>,
189 #[serde(default)]
190 pub urls: Option<Vec<String>>,
191 #[serde(default)]
192 pub data_quality: Option<String>,
193 #[serde(default)]
194 pub images: Option<Vec<Image>>,
195 #[serde(default)]
196 pub members: Option<Vec<ArtistMember>>,
197 #[serde(flatten)]
198 pub extra: ExtraFields,
199}
200
201#[derive(Debug, Clone, Serialize, Deserialize)]
202pub struct ArtistRelease {
203 #[serde(default)]
204 pub artist: Option<String>,
205 pub id: u64,
206 #[serde(default)]
207 pub main_release: Option<u64>,
208 pub resource_url: String,
209 #[serde(default)]
210 pub role: Option<String>,
211 #[serde(default)]
212 pub thumb: Option<String>,
213 pub title: String,
214 #[serde(default)]
215 pub r#type: Option<String>,
216 #[serde(default)]
217 pub year: Option<i32>,
218 #[serde(flatten)]
219 pub extra: ExtraFields,
220}
221
222#[derive(Debug, Clone, Serialize, Deserialize)]
223pub struct ArtistReleases {
224 pub releases: Vec<ArtistRelease>,
225 pub pagination: Pagination,
226 #[serde(flatten)]
227 pub extra: ExtraFields,
228}
229
230#[derive(Debug, Clone, Serialize, Deserialize)]
231pub struct ReleaseCommunityRatingSummary {
232 pub average: f64,
233 pub count: u64,
234}
235
236#[derive(Debug, Clone, Serialize, Deserialize)]
237pub struct ReleaseCommunity {
238 #[serde(default)]
239 pub contributors: Option<Vec<UserReference>>,
240 #[serde(default)]
241 pub data_quality: Option<String>,
242 #[serde(default)]
243 pub have: Option<u64>,
244 #[serde(default)]
245 pub rating: Option<ReleaseCommunityRatingSummary>,
246 #[serde(default)]
247 pub status: Option<DatabaseStatus>,
248 #[serde(default)]
249 pub submitter: Option<UserReference>,
250 #[serde(default)]
251 pub want: Option<u64>,
252 #[serde(flatten)]
253 pub extra: ExtraFields,
254}
255
256#[derive(Debug, Clone, Serialize, Deserialize)]
257pub struct ReleaseCompany {
258 #[serde(default)]
259 pub catno: Option<String>,
260 #[serde(default)]
261 pub entity_type: Option<String>,
262 #[serde(default)]
263 pub entity_type_name: Option<String>,
264 pub id: u64,
265 pub name: String,
266 pub resource_url: String,
267 #[serde(flatten)]
268 pub extra: ExtraFields,
269}
270
271#[derive(Debug, Clone, Serialize, Deserialize)]
272pub struct ReleaseIdentifier {
273 #[serde(rename = "type")]
274 pub id_type: String,
275 pub value: String,
276 #[serde(flatten)]
277 pub extra: ExtraFields,
278}
279
280#[derive(Debug, Clone, Serialize, Deserialize)]
281pub struct ReleaseSeries {
282 pub name: String,
283 #[serde(default)]
284 pub catno: Option<String>,
285 #[serde(default)]
286 pub entity_type: Option<String>,
287 #[serde(default)]
288 pub entity_type_name: Option<String>,
289 pub id: u64,
290 pub resource_url: String,
291 #[serde(default)]
292 pub thumbnail_url: Option<String>,
293 #[serde(flatten)]
294 pub extra: ExtraFields,
295}
296
297#[derive(Debug, Clone, Serialize, Deserialize)]
298pub struct Release {
299 pub id: u64,
300 pub title: String,
301 pub resource_url: String,
302 #[serde(default)]
303 pub uri: Option<String>,
304 #[serde(default)]
305 pub year: Option<i32>,
306 #[serde(default)]
307 pub artists: Option<Vec<ArtistCredit>>,
308 #[serde(default)]
309 pub data_quality: Option<String>,
310 #[serde(default)]
311 pub thumb: Option<String>,
312 #[serde(default)]
313 pub community: Option<ReleaseCommunity>,
314 #[serde(default)]
315 pub companies: Option<Vec<ReleaseCompany>>,
316 #[serde(default)]
317 pub country: Option<String>,
318 #[serde(default)]
319 pub date_added: Option<String>,
320 #[serde(default)]
321 pub date_changed: Option<String>,
322 #[serde(default)]
323 pub estimated_weight: Option<u64>,
324 #[serde(default)]
325 pub extraartists: Option<Vec<ArtistCredit>>,
326 #[serde(default)]
327 pub format_quantity: Option<u32>,
328 #[serde(default)]
329 pub formats: Option<Vec<Format>>,
330 #[serde(default)]
331 pub genres: Option<Vec<String>>,
332 #[serde(default)]
333 pub identifiers: Option<Vec<ReleaseIdentifier>>,
334 #[serde(default)]
335 pub images: Option<Vec<Image>>,
336 #[serde(default)]
337 pub labels: Option<Vec<LabelReference>>,
338 #[serde(default)]
339 pub lowest_price: Option<f64>,
340 #[serde(default)]
341 pub master_id: Option<u64>,
342 #[serde(default)]
343 pub master_url: Option<String>,
344 #[serde(default)]
345 pub notes: Option<String>,
346 #[serde(default)]
347 pub num_for_sale: Option<u64>,
348 #[serde(default)]
349 pub released: Option<String>,
350 #[serde(default)]
351 pub released_formatted: Option<String>,
352 #[serde(default)]
353 pub series: Option<Vec<ReleaseSeries>>,
354 #[serde(default)]
355 pub status: Option<DatabaseStatus>,
356 #[serde(default)]
357 pub styles: Option<Vec<String>>,
358 #[serde(default)]
359 pub tracklist: Option<Vec<Track>>,
360 #[serde(default)]
361 pub videos: Option<Vec<Video>>,
362 #[serde(flatten)]
363 pub extra: ExtraFields,
364}
365
366#[derive(Debug, Clone, Serialize, Deserialize)]
367pub struct ReleaseRating {
368 pub username: String,
369 pub release_id: u64,
370 pub rating: u8,
371 #[serde(flatten)]
372 pub extra: ExtraFields,
373}
374
375#[derive(Debug, Clone, Serialize, Deserialize)]
376pub struct RatingSummary {
377 pub average: f64,
378 pub count: u64,
379}
380
381#[derive(Debug, Clone, Serialize, Deserialize)]
382pub struct ReleaseCommunityRating {
383 pub release_id: u64,
384 pub rating: RatingSummary,
385 #[serde(flatten)]
386 pub extra: ExtraFields,
387}
388
389#[derive(Debug, Clone, Serialize, Deserialize)]
390pub struct ReleaseStats {
391 pub num_have: u64,
392 pub num_want: u64,
393 #[serde(flatten)]
394 pub extra: ExtraFields,
395}
396
397#[derive(Debug, Clone, Serialize, Deserialize)]
398pub struct Master {
399 pub id: u64,
400 pub title: String,
401 pub resource_url: String,
402 #[serde(default)]
403 pub main_release: Option<u64>,
404 #[serde(default)]
405 pub main_release_url: Option<String>,
406 #[serde(default)]
407 pub uri: Option<String>,
408 #[serde(default)]
409 pub artists: Option<Vec<ArtistCredit>>,
410 #[serde(default)]
411 pub versions_url: Option<String>,
412 #[serde(default)]
413 pub year: Option<i32>,
414 #[serde(default)]
415 pub images: Option<Vec<Image>>,
416 #[serde(default)]
417 pub tracklist: Option<Vec<Track>>,
418 #[serde(default)]
419 pub videos: Option<Vec<Video>>,
420 #[serde(default)]
421 pub genres: Option<Vec<String>>,
422 #[serde(default)]
423 pub styles: Option<Vec<String>>,
424 #[serde(default)]
425 pub num_for_sale: Option<u64>,
426 #[serde(default)]
427 pub lowest_price: Option<f64>,
428 #[serde(default)]
429 pub data_quality: Option<String>,
430 #[serde(flatten)]
431 pub extra: ExtraFields,
432}
433
434#[derive(Debug, Clone, Serialize, Deserialize)]
435pub struct CollectionStats {
436 pub in_collection: u64,
437 pub in_wantlist: u64,
438}
439
440#[derive(Debug, Clone, Serialize, Deserialize)]
441pub struct MasterVersionStats {
442 #[serde(default)]
443 pub user: Option<CollectionStats>,
444 #[serde(default)]
445 pub community: Option<CollectionStats>,
446}
447
448#[derive(Debug, Clone, Serialize, Deserialize)]
449pub struct MasterVersion {
450 #[serde(default)]
451 pub status: Option<DatabaseStatus>,
452 #[serde(default)]
453 pub stats: Option<MasterVersionStats>,
454 #[serde(default)]
455 pub thumb: Option<String>,
456 #[serde(default)]
457 pub format: Option<String>,
458 #[serde(default)]
459 pub country: Option<String>,
460 pub title: String,
461 #[serde(default)]
462 pub label: Option<String>,
463 #[serde(default)]
464 pub released: Option<String>,
465 #[serde(default)]
466 pub major_formats: Option<Vec<String>>,
467 #[serde(default)]
468 pub catno: Option<String>,
469 pub resource_url: String,
470 pub id: u64,
471 #[serde(flatten)]
472 pub extra: ExtraFields,
473}
474
475#[derive(Debug, Clone, Serialize, Deserialize)]
476pub struct MasterVersions {
477 pub versions: Vec<MasterVersion>,
478 pub pagination: Pagination,
479 #[serde(flatten)]
480 pub extra: ExtraFields,
481}
482
483#[derive(Debug, Clone, Serialize, Deserialize)]
484pub struct LabelShort {
485 pub resource_url: String,
486 pub id: u64,
487 pub name: String,
488 #[serde(flatten)]
489 pub extra: ExtraFields,
490}
491
492#[derive(Debug, Clone, Serialize, Deserialize)]
493pub struct Label {
494 pub id: u64,
495 pub name: String,
496 pub resource_url: String,
497 #[serde(default)]
498 pub uri: Option<String>,
499 #[serde(default)]
500 pub releases_url: Option<String>,
501 #[serde(default)]
502 pub profile: Option<String>,
503 #[serde(default)]
504 pub contact_info: Option<String>,
505 #[serde(default)]
506 pub urls: Option<Vec<String>>,
507 #[serde(default)]
508 pub images: Option<Vec<Image>>,
509 #[serde(default)]
510 pub sublabels: Option<Vec<LabelShort>>,
511 #[serde(default)]
512 pub data_quality: Option<String>,
513 #[serde(flatten)]
514 pub extra: ExtraFields,
515}
516
517#[derive(Debug, Clone, Serialize, Deserialize)]
518pub struct LabelRelease {
519 #[serde(default)]
520 pub artist: Option<String>,
521 #[serde(default)]
522 pub catno: Option<String>,
523 #[serde(default)]
524 pub format: Option<String>,
525 pub id: u64,
526 pub resource_url: String,
527 #[serde(default)]
528 pub status: Option<DatabaseStatus>,
529 #[serde(default)]
530 pub thumb: Option<String>,
531 pub title: String,
532 #[serde(default)]
533 pub year: Option<i32>,
534 #[serde(flatten)]
535 pub extra: ExtraFields,
536}
537
538#[derive(Debug, Clone, Serialize, Deserialize)]
539pub struct LabelReleases {
540 pub releases: Vec<LabelRelease>,
541 pub pagination: Pagination,
542 #[serde(flatten)]
543 pub extra: ExtraFields,
544}
545
546#[derive(Debug, Clone, Serialize, Deserialize)]
547pub struct SearchResultUserData {
548 #[serde(default)]
549 pub in_wantlist: Option<bool>,
550 #[serde(default)]
551 pub in_collection: Option<bool>,
552}
553
554#[derive(Debug, Clone, Serialize, Deserialize)]
555pub struct SearchResultCommunity {
556 #[serde(default)]
557 pub want: Option<u64>,
558 #[serde(default)]
559 pub have: Option<u64>,
560}
561
562#[derive(Debug, Clone, Serialize, Deserialize)]
563pub struct SearchResult {
564 pub id: u64,
565 #[serde(rename = "type")]
566 pub result_type: String,
567 #[serde(default)]
568 pub user_data: Option<SearchResultUserData>,
569 #[serde(default)]
570 pub master_id: Option<u64>,
571 #[serde(default)]
572 pub master_url: Option<String>,
573 pub uri: String,
574 pub title: String,
575 #[serde(default)]
576 pub thumb: Option<String>,
577 #[serde(default)]
578 pub cover_image: Option<String>,
579 pub resource_url: String,
580 #[serde(default)]
581 pub country: Option<String>,
582 #[serde(default)]
583 pub year: Option<String>,
584 #[serde(default)]
585 pub format: Option<Vec<String>>,
586 #[serde(default)]
587 pub label: Option<Vec<String>>,
588 #[serde(default)]
589 pub genre: Option<Vec<String>>,
590 #[serde(default)]
591 pub style: Option<Vec<String>>,
592 #[serde(default)]
593 pub barcode: Option<Vec<String>>,
594 #[serde(default)]
595 pub catno: Option<String>,
596 #[serde(default)]
597 pub community: Option<SearchResultCommunity>,
598 #[serde(default)]
599 pub format_quantity: Option<u32>,
600 #[serde(default)]
601 pub formats: Option<Vec<Format>>,
602 #[serde(flatten)]
603 pub extra: ExtraFields,
604}
605
606#[derive(Debug, Clone, Serialize, Deserialize)]
607pub struct SearchResults {
608 pub results: Vec<SearchResult>,
609 pub pagination: Pagination,
610 #[serde(flatten)]
611 pub extra: ExtraFields,
612}
613
614#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
615#[serde(rename_all = "UPPERCASE")]
616pub enum Currency {
617 Usd,
618 Gbp,
619 Eur,
620 Cad,
621 Aud,
622 Jpy,
623 Chf,
624 Mxn,
625 Brl,
626 Nzd,
627 Sek,
628 Zar,
629}
630
631impl Currency {
632 pub fn as_code(self) -> &'static str {
633 match self {
634 Currency::Usd => "USD",
635 Currency::Gbp => "GBP",
636 Currency::Eur => "EUR",
637 Currency::Cad => "CAD",
638 Currency::Aud => "AUD",
639 Currency::Jpy => "JPY",
640 Currency::Chf => "CHF",
641 Currency::Mxn => "MXN",
642 Currency::Brl => "BRL",
643 Currency::Nzd => "NZD",
644 Currency::Sek => "SEK",
645 Currency::Zar => "ZAR",
646 }
647 }
648}
649
650#[derive(Debug, Clone, Serialize, Deserialize)]
651pub struct Price {
652 #[serde(default)]
653 pub currency: Option<Currency>,
654 #[serde(default)]
655 pub value: Option<f64>,
656 #[serde(default)]
657 pub curr_abbr: Option<Currency>,
658 #[serde(default)]
659 pub curr_id: Option<u64>,
660 #[serde(default)]
661 pub formatted: Option<String>,
662 #[serde(flatten)]
663 pub extra: ExtraFields,
664}
665
666#[derive(Debug, Clone, Serialize, Deserialize)]
667pub struct ListingReleaseSummary {
668 #[serde(default)]
669 pub catalog_number: Option<String>,
670 pub resource_url: String,
671 #[serde(default)]
672 pub year: Option<i32>,
673 pub id: u64,
674 #[serde(default)]
675 pub description: Option<String>,
676 #[serde(default)]
677 pub images: Option<Vec<Image>>,
678 #[serde(default)]
679 pub artist: Option<String>,
680 pub title: String,
681 #[serde(default)]
682 pub format: Option<String>,
683 #[serde(default)]
684 pub thumbnail: Option<String>,
685 #[serde(flatten)]
686 pub extra: ExtraFields,
687}
688
689#[derive(Debug, Clone, Serialize, Deserialize)]
690pub struct Listing {
691 pub id: u64,
692 #[serde(default)]
693 pub status: Option<SaleStatus>,
694 #[serde(default)]
695 pub resource_url: Option<String>,
696 #[serde(default)]
697 pub uri: Option<String>,
698 #[serde(default)]
699 pub price: Option<Price>,
700 #[serde(default)]
701 pub sleeve_condition: Option<SleeveCondition>,
702 #[serde(default)]
703 pub condition: Option<MediaCondition>,
704 #[serde(default)]
705 pub posted: Option<String>,
706 #[serde(default)]
707 pub comments: Option<String>,
708 #[serde(default)]
709 pub allow_offers: Option<bool>,
710 #[serde(default)]
711 pub ships_from: Option<String>,
712 #[serde(default)]
713 pub audio: Option<bool>,
714 #[serde(default)]
715 pub release: Option<ListingReleaseSummary>,
716 #[serde(flatten)]
717 pub extra: ExtraFields,
718}
719
720#[derive(Debug, Clone, Serialize, Deserialize)]
721pub struct CreateListingResponse {
722 pub listing_id: u64,
723 pub resource_url: String,
724 #[serde(flatten)]
725 pub extra: ExtraFields,
726}
727
728#[derive(Debug, Clone, Serialize, Deserialize)]
729pub struct OrderItem {
730 #[serde(default)]
731 pub release: Option<ListingReleaseSummary>,
732 #[serde(default)]
733 pub price: Option<Price>,
734 #[serde(default)]
735 pub media_condition: Option<MediaCondition>,
736 #[serde(default)]
737 pub sleeve_condition: Option<SleeveCondition>,
738 pub id: u64,
739 #[serde(flatten)]
740 pub extra: ExtraFields,
741}
742
743#[derive(Debug, Clone, Serialize, Deserialize)]
744pub struct Order {
745 pub id: String,
746 pub resource_url: String,
747 #[serde(default)]
748 pub status: Option<OrderStatus>,
749 #[serde(default)]
750 pub messages_url: Option<String>,
751 #[serde(default)]
752 pub uri: Option<String>,
753 #[serde(default)]
754 pub fee: Option<Price>,
755 #[serde(default)]
756 pub created: Option<String>,
757 #[serde(default)]
758 pub items: Option<Vec<OrderItem>>,
759 #[serde(default)]
760 pub shipping_address: Option<String>,
761 #[serde(default)]
762 pub additional_instructions: Option<String>,
763 #[serde(default)]
764 pub archived: Option<bool>,
765 #[serde(default)]
766 pub seller: Option<UserReference>,
767 #[serde(default)]
768 pub last_activity: Option<String>,
769 #[serde(default)]
770 pub buyer: Option<UserReference>,
771 #[serde(default)]
772 pub total: Option<Price>,
773 #[serde(flatten)]
774 pub extra: ExtraFields,
775}
776
777#[derive(Debug, Clone, Serialize, Deserialize)]
778pub struct OrdersResponse {
779 pub orders: Vec<Order>,
780 pub pagination: Pagination,
781 #[serde(flatten)]
782 pub extra: ExtraFields,
783}
784
785#[derive(Debug, Clone, Serialize, Deserialize)]
786pub struct OrderMessage {
787 pub message: String,
788 #[serde(default)]
789 pub timestamp: Option<String>,
790 #[serde(default)]
791 pub subject: Option<String>,
792 #[serde(default)]
793 pub r#type: Option<String>,
794 #[serde(default)]
795 pub status_id: Option<u64>,
796 #[serde(flatten)]
797 pub extra: ExtraFields,
798}
799
800#[derive(Debug, Clone, Serialize, Deserialize)]
801pub struct OrderMessagesResponse {
802 pub messages: Vec<OrderMessage>,
803 pub pagination: Pagination,
804 #[serde(flatten)]
805 pub extra: ExtraFields,
806}
807
808#[derive(Debug, Clone, Serialize, Deserialize)]
809pub struct MarketplaceReleaseStats {
810 #[serde(default)]
811 pub lowest_price: Option<Price>,
812 #[serde(default)]
813 pub num_for_sale: Option<u64>,
814 #[serde(default)]
815 pub blocked_from_sale: Option<bool>,
816 #[serde(flatten)]
817 pub extra: ExtraFields,
818}
819
820#[derive(Debug, Clone, Serialize, Deserialize)]
821pub struct InventoryExport {
822 pub id: u64,
823 #[serde(default)]
824 pub status: Option<String>,
825 #[serde(default)]
826 pub created_ts: Option<String>,
827 #[serde(default)]
828 pub finished_ts: Option<String>,
829 #[serde(default)]
830 pub url: Option<String>,
831 #[serde(default)]
832 pub download_url: Option<String>,
833 #[serde(default)]
834 pub filename: Option<String>,
835 #[serde(flatten)]
836 pub extra: ExtraFields,
837}
838
839#[derive(Debug, Clone, Serialize, Deserialize)]
840pub struct InventoryExports {
841 pub items: Vec<InventoryExport>,
842 pub pagination: Pagination,
843 #[serde(flatten)]
844 pub extra: ExtraFields,
845}
846
847#[derive(Debug, Clone, Serialize, Deserialize)]
848pub struct UserListSummary {
849 pub id: u64,
850 pub name: String,
851 pub resource_url: String,
852 #[serde(default)]
853 pub uri: Option<String>,
854 #[serde(default)]
855 pub public: Option<bool>,
856 #[serde(default)]
857 pub description: Option<String>,
858 #[serde(default)]
859 pub date_added: Option<String>,
860 #[serde(default)]
861 pub date_changed: Option<String>,
862 #[serde(flatten)]
863 pub extra: ExtraFields,
864}
865
866#[derive(Debug, Clone, Serialize, Deserialize)]
867pub struct UserProfile {
868 pub id: u64,
869 pub username: String,
870 pub resource_url: String,
871 #[serde(default)]
872 pub curr_abbr: Option<Currency>,
873 #[serde(default)]
874 pub avatar_url: Option<String>,
875 #[serde(default)]
876 pub profile: Option<String>,
877 #[serde(default)]
878 pub name: Option<String>,
879 #[serde(default)]
880 pub home_page: Option<String>,
881 #[serde(default)]
882 pub location: Option<String>,
883 #[serde(default)]
884 pub email: Option<String>,
885 #[serde(default)]
886 pub num_collection: Option<u64>,
887 #[serde(default)]
888 pub num_wantlist: Option<u64>,
889 #[serde(default)]
890 pub num_for_sale: Option<u64>,
891 #[serde(default)]
892 pub num_lists: Option<u64>,
893 #[serde(default)]
894 pub registered: Option<String>,
895 #[serde(flatten)]
896 pub extra: ExtraFields,
897}
898
899#[derive(Debug, Clone, Serialize, Deserialize)]
900pub struct UserInventory {
901 pub listings: Vec<Listing>,
902 pub pagination: Pagination,
903 #[serde(flatten)]
904 pub extra: ExtraFields,
905}
906
907#[derive(Debug, Clone, Serialize, Deserialize)]
908pub struct UserContributions {
909 pub contributions: Vec<Release>,
910 pub pagination: Pagination,
911 #[serde(flatten)]
912 pub extra: ExtraFields,
913}
914
915#[derive(Debug, Clone, Serialize, Deserialize)]
916pub struct SubmissionArtist {
917 pub id: u64,
918 pub name: String,
919 pub resource_url: String,
920 #[serde(default)]
921 pub releases_url: Option<String>,
922 #[serde(default)]
923 pub uri: Option<String>,
924 #[serde(default)]
925 pub namevariations: Option<Vec<String>>,
926 #[serde(default)]
927 pub data_quality: Option<String>,
928 #[serde(flatten)]
929 pub extra: ExtraFields,
930}
931
932#[derive(Debug, Clone, Serialize, Deserialize)]
933pub struct UserSubmissionsPayload {
934 pub artists: Vec<SubmissionArtist>,
935 pub labels: Vec<Label>,
936 pub releases: Vec<Release>,
937 #[serde(flatten)]
938 pub extra: ExtraFields,
939}
940
941#[derive(Debug, Clone, Serialize, Deserialize)]
942pub struct UserSubmissions {
943 pub submissions: UserSubmissionsPayload,
944 pub pagination: Pagination,
945 #[serde(flatten)]
946 pub extra: ExtraFields,
947}
948
949#[derive(Debug, Clone, Serialize, Deserialize)]
950pub struct UserLists {
951 pub lists: Vec<UserListSummary>,
952 pub pagination: Pagination,
953 #[serde(flatten)]
954 pub extra: ExtraFields,
955}
956
957#[derive(Debug, Clone, Serialize, Deserialize)]
958pub struct CollectionFolder {
959 pub id: u64,
960 pub count: u64,
961 pub name: String,
962 pub resource_url: String,
963 #[serde(flatten)]
964 pub extra: ExtraFields,
965}
966
967#[derive(Debug, Clone, Serialize, Deserialize)]
968pub struct CollectionFolders {
969 pub folders: Vec<CollectionFolder>,
970 #[serde(flatten)]
971 pub extra: ExtraFields,
972}
973
974#[derive(Debug, Clone, Serialize, Deserialize)]
975pub struct BasicReleaseInfo {
976 pub id: u64,
977 pub title: String,
978 #[serde(default)]
979 pub year: Option<i32>,
980 pub resource_url: String,
981 #[serde(default)]
982 pub thumb: Option<String>,
983 #[serde(default)]
984 pub cover_image: Option<String>,
985 #[serde(default)]
986 pub formats: Option<Vec<Format>>,
987 #[serde(default)]
988 pub labels: Option<Vec<LabelReference>>,
989 #[serde(default)]
990 pub artists: Option<Vec<ArtistCredit>>,
991 #[serde(default)]
992 pub genres: Option<Vec<String>>,
993 #[serde(default)]
994 pub styles: Option<Vec<String>>,
995 #[serde(flatten)]
996 pub extra: ExtraFields,
997}
998
999#[derive(Debug, Clone, Serialize, Deserialize)]
1000pub struct CollectionNote {
1001 pub field_id: u64,
1002 pub value: String,
1003 #[serde(flatten)]
1004 pub extra: ExtraFields,
1005}
1006
1007#[derive(Debug, Clone, Serialize, Deserialize)]
1008pub struct CollectionRelease {
1009 pub id: u64,
1010 pub instance_id: u64,
1011 #[serde(default)]
1012 pub folder_id: Option<u64>,
1013 #[serde(default)]
1014 pub rating: Option<u8>,
1015 #[serde(default)]
1016 pub basic_information: Option<BasicReleaseInfo>,
1017 #[serde(default)]
1018 pub notes: Option<Vec<CollectionNote>>,
1019 #[serde(default)]
1020 pub date_added: Option<String>,
1021 #[serde(flatten)]
1022 pub extra: ExtraFields,
1023}
1024
1025#[derive(Debug, Clone, Serialize, Deserialize)]
1026pub struct CollectionReleases {
1027 pub releases: Vec<CollectionRelease>,
1028 pub pagination: Pagination,
1029 #[serde(flatten)]
1030 pub extra: ExtraFields,
1031}
1032
1033#[derive(Debug, Clone, Serialize, Deserialize)]
1034pub struct AddCollectionReleaseResponse {
1035 pub instance_id: u64,
1036 pub resource_url: String,
1037 #[serde(flatten)]
1038 pub extra: ExtraFields,
1039}
1040
1041#[derive(Debug, Clone, Serialize, Deserialize)]
1042pub struct CollectionField {
1043 pub id: u64,
1044 pub name: String,
1045 #[serde(rename = "type")]
1046 pub field_type: String,
1047 pub public: bool,
1048 pub position: u32,
1049 #[serde(default)]
1050 pub options: Option<Vec<String>>,
1051 #[serde(default)]
1052 pub lines: Option<u32>,
1053 #[serde(flatten)]
1054 pub extra: ExtraFields,
1055}
1056
1057#[derive(Debug, Clone, Serialize, Deserialize)]
1058pub struct CollectionFields {
1059 pub fields: Vec<CollectionField>,
1060 #[serde(flatten)]
1061 pub extra: ExtraFields,
1062}
1063
1064#[derive(Debug, Clone, Serialize, Deserialize)]
1065pub struct CollectionValue {
1066 pub minimum: String,
1067 pub median: String,
1068 pub maximum: String,
1069 #[serde(flatten)]
1070 pub extra: ExtraFields,
1071}
1072
1073#[derive(Debug, Clone, Serialize, Deserialize)]
1074pub struct WantlistBasicInformation {
1075 pub resource_url: String,
1076 pub id: u64,
1077 #[serde(default)]
1078 pub formats: Option<Vec<Format>>,
1079 #[serde(default)]
1080 pub thumb: Option<String>,
1081 #[serde(default)]
1082 pub cover_image: Option<String>,
1083 pub title: String,
1084 #[serde(default)]
1085 pub labels: Option<Vec<LabelReference>>,
1086 #[serde(default)]
1087 pub year: Option<i32>,
1088 #[serde(default)]
1089 pub artists: Option<Vec<ArtistCredit>>,
1090 #[serde(default)]
1091 pub genres: Option<Vec<String>>,
1092 #[serde(default)]
1093 pub styles: Option<Vec<String>>,
1094 #[serde(flatten)]
1095 pub extra: ExtraFields,
1096}
1097
1098#[derive(Debug, Clone, Serialize, Deserialize)]
1099pub struct WantlistEntry {
1100 pub id: u64,
1101 pub resource_url: String,
1102 #[serde(default)]
1103 pub notes: Option<String>,
1104 #[serde(default)]
1105 pub rating: Option<u8>,
1106 #[serde(default)]
1107 pub basic_information: Option<WantlistBasicInformation>,
1108 #[serde(flatten)]
1109 pub extra: ExtraFields,
1110}
1111
1112#[derive(Debug, Clone, Serialize, Deserialize)]
1113pub struct WantlistEntries {
1114 pub wants: Vec<WantlistEntry>,
1115 pub pagination: Pagination,
1116 #[serde(flatten)]
1117 pub extra: ExtraFields,
1118}
1119
1120#[derive(Debug, Clone, Serialize, Deserialize)]
1121pub struct DiscogsList {
1122 pub list_id: u64,
1123 pub name: String,
1124 pub resource_url: String,
1125 #[serde(default)]
1126 pub description: Option<String>,
1127 #[serde(default)]
1128 pub created_ts: Option<String>,
1129 #[serde(default)]
1130 pub modified_ts: Option<String>,
1131 #[serde(default)]
1132 pub url: Option<String>,
1133 #[serde(default)]
1134 pub public: Option<bool>,
1135 pub items: Vec<ListItem>,
1136 #[serde(flatten)]
1137 pub extra: ExtraFields,
1138}
1139
1140#[derive(Debug, Clone, Serialize, Deserialize)]
1141pub struct ListItem {
1142 pub id: u64,
1143 pub display_title: String,
1144 #[serde(default)]
1145 pub comment: Option<String>,
1146 #[serde(default)]
1147 pub uri: Option<String>,
1148 #[serde(default)]
1149 pub image_url: Option<String>,
1150 #[serde(default)]
1151 pub resource_url: Option<String>,
1152 #[serde(rename = "type", default)]
1153 pub item_type: Option<String>,
1154 #[serde(flatten)]
1155 pub extra: ExtraFields,
1156}
1157
1158#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1159pub struct PaginationParams {
1160 #[serde(skip_serializing_if = "Option::is_none")]
1161 pub page: Option<u32>,
1162 #[serde(skip_serializing_if = "Option::is_none")]
1163 pub per_page: Option<u32>,
1164}
1165
1166#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
1167#[serde(rename_all = "lowercase")]
1168pub enum SortOrder {
1169 Asc,
1170 Desc,
1171}
1172
1173#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
1174#[serde(rename_all = "lowercase")]
1175pub enum SearchType {
1176 Release,
1177 Master,
1178 Artist,
1179 Label,
1180}
1181
1182#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
1183pub enum DatabaseStatus {
1184 Accepted,
1185 Draft,
1186 Deleted,
1187 Rejected,
1188}
1189
1190#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
1191pub enum SaleStatus {
1192 Draft,
1193 #[serde(rename = "For Sale")]
1194 ForSale,
1195 Expired,
1196}
1197
1198#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
1199pub enum MediaCondition {
1200 #[serde(rename = "Mint (M)")]
1201 Mint,
1202 #[serde(rename = "Near Mint (NM or M-)")]
1203 NearMint,
1204 #[serde(rename = "Very Good Plus (VG+)")]
1205 VeryGoodPlus,
1206 #[serde(rename = "Very Good (VG)")]
1207 VeryGood,
1208 #[serde(rename = "Good Plus (G+)")]
1209 GoodPlus,
1210 #[serde(rename = "Good (G)")]
1211 Good,
1212 #[serde(rename = "Fair (F)")]
1213 Fair,
1214 #[serde(rename = "Poor (P)")]
1215 Poor,
1216}
1217
1218#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
1219pub enum SleeveCondition {
1220 #[serde(rename = "Mint (M)")]
1221 Mint,
1222 #[serde(rename = "Near Mint (NM or M-)")]
1223 NearMint,
1224 #[serde(rename = "Very Good Plus (VG+)")]
1225 VeryGoodPlus,
1226 #[serde(rename = "Very Good (VG)")]
1227 VeryGood,
1228 #[serde(rename = "Good Plus (G+)")]
1229 GoodPlus,
1230 #[serde(rename = "Good (G)")]
1231 Good,
1232 #[serde(rename = "Fair (F)")]
1233 Fair,
1234 #[serde(rename = "Poor (P)")]
1235 Poor,
1236 Generic,
1237 #[serde(rename = "Not Graded")]
1238 NotGraded,
1239 #[serde(rename = "No Cover")]
1240 NoCover,
1241}
1242
1243#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
1244pub enum OrderStatus {
1245 #[serde(rename = "New Order")]
1246 NewOrder,
1247 #[serde(rename = "Buyer Contacted")]
1248 BuyerContacted,
1249 #[serde(rename = "Invoice Sent")]
1250 InvoiceSent,
1251 #[serde(rename = "Payment Pending")]
1252 PaymentPending,
1253 #[serde(rename = "Payment Received")]
1254 PaymentReceived,
1255 Shipped,
1256 #[serde(rename = "Refund Sent")]
1257 RefundSent,
1258 #[serde(rename = "Cancelled (Non-Paying Buyer)")]
1259 CancelledNonPayingBuyer,
1260 #[serde(rename = "Cancelled (Item Unavailable)")]
1261 CancelledItemUnavailable,
1262 #[serde(rename = "Cancelled (Per Buyer's Request)")]
1263 CancelledByBuyerRequest,
1264}
1265
1266#[derive(Debug, Clone, Serialize, Deserialize)]
1267#[serde(untagged)]
1268pub enum NumberOrAuto {
1269 Number(u32),
1270 Auto(String),
1271}
1272
1273#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1274pub struct ArtistReleasesQuery {
1275 #[serde(flatten)]
1276 pub pagination: PaginationParams,
1277 #[serde(skip_serializing_if = "Option::is_none")]
1278 pub sort: Option<String>,
1279 #[serde(skip_serializing_if = "Option::is_none")]
1280 pub sort_order: Option<SortOrder>,
1281}
1282
1283#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1284pub struct MasterVersionsQuery {
1285 #[serde(flatten)]
1286 pub pagination: PaginationParams,
1287 #[serde(skip_serializing_if = "Option::is_none")]
1288 pub format: Option<String>,
1289 #[serde(skip_serializing_if = "Option::is_none")]
1290 pub label: Option<String>,
1291 #[serde(skip_serializing_if = "Option::is_none")]
1292 pub released: Option<String>,
1293 #[serde(skip_serializing_if = "Option::is_none")]
1294 pub country: Option<String>,
1295 #[serde(skip_serializing_if = "Option::is_none")]
1296 pub sort: Option<String>,
1297 #[serde(skip_serializing_if = "Option::is_none")]
1298 pub sort_order: Option<SortOrder>,
1299}
1300
1301#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1302pub struct SearchQuery {
1303 #[serde(rename = "q", skip_serializing_if = "Option::is_none")]
1304 pub query: Option<String>,
1305 #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
1306 pub query_type: Option<SearchType>,
1307 #[serde(skip_serializing_if = "Option::is_none")]
1308 pub title: Option<String>,
1309 #[serde(skip_serializing_if = "Option::is_none")]
1310 pub release_title: Option<String>,
1311 #[serde(skip_serializing_if = "Option::is_none")]
1312 pub credit: Option<String>,
1313 #[serde(skip_serializing_if = "Option::is_none")]
1314 pub artist: Option<String>,
1315 #[serde(skip_serializing_if = "Option::is_none")]
1316 pub anv: Option<String>,
1317 #[serde(skip_serializing_if = "Option::is_none")]
1318 pub label: Option<String>,
1319 #[serde(skip_serializing_if = "Option::is_none")]
1320 pub genre: Option<String>,
1321 #[serde(skip_serializing_if = "Option::is_none")]
1322 pub style: Option<String>,
1323 #[serde(skip_serializing_if = "Option::is_none")]
1324 pub country: Option<String>,
1325 #[serde(skip_serializing_if = "Option::is_none")]
1326 pub year: Option<String>,
1327 #[serde(skip_serializing_if = "Option::is_none")]
1328 pub format: Option<String>,
1329 #[serde(skip_serializing_if = "Option::is_none")]
1330 pub catno: Option<String>,
1331 #[serde(skip_serializing_if = "Option::is_none")]
1332 pub barcode: Option<String>,
1333 #[serde(skip_serializing_if = "Option::is_none")]
1334 pub track: Option<String>,
1335 #[serde(skip_serializing_if = "Option::is_none")]
1336 pub submitter: Option<String>,
1337 #[serde(skip_serializing_if = "Option::is_none")]
1338 pub contributor: Option<String>,
1339 #[serde(flatten)]
1340 pub pagination: PaginationParams,
1341}
1342
1343#[derive(Debug, Clone, Serialize, Deserialize)]
1344pub struct CreateListingRequest {
1345 pub release_id: u64,
1346 pub condition: MediaCondition,
1347 pub price: f64,
1348 pub status: SaleStatus,
1349 #[serde(skip_serializing_if = "Option::is_none")]
1350 pub sleeve_condition: Option<SleeveCondition>,
1351 #[serde(skip_serializing_if = "Option::is_none")]
1352 pub comments: Option<String>,
1353 #[serde(skip_serializing_if = "Option::is_none")]
1354 pub allow_offers: Option<bool>,
1355 #[serde(skip_serializing_if = "Option::is_none")]
1356 pub external_id: Option<String>,
1357 #[serde(skip_serializing_if = "Option::is_none")]
1358 pub location: Option<String>,
1359 #[serde(skip_serializing_if = "Option::is_none")]
1360 pub weight: Option<NumberOrAuto>,
1361 #[serde(skip_serializing_if = "Option::is_none")]
1362 pub format_quantity: Option<NumberOrAuto>,
1363}
1364
1365#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1366pub struct OrdersQuery {
1367 #[serde(skip_serializing_if = "Option::is_none")]
1368 pub status: Option<OrderStatus>,
1369 #[serde(skip_serializing_if = "Option::is_none")]
1370 pub created_after: Option<String>,
1371 #[serde(skip_serializing_if = "Option::is_none")]
1372 pub created_before: Option<String>,
1373 #[serde(skip_serializing_if = "Option::is_none")]
1374 pub archived: Option<bool>,
1375 #[serde(flatten)]
1376 pub pagination: PaginationParams,
1377 #[serde(skip_serializing_if = "Option::is_none")]
1378 pub sort: Option<String>,
1379 #[serde(skip_serializing_if = "Option::is_none")]
1380 pub sort_order: Option<SortOrder>,
1381}
1382
1383#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1384pub struct EditOrderRequest {
1385 #[serde(skip_serializing_if = "Option::is_none")]
1386 pub status: Option<OrderStatus>,
1387 #[serde(skip_serializing_if = "Option::is_none")]
1388 pub shipping: Option<f64>,
1389}
1390
1391#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1392pub struct AddOrderMessageRequest {
1393 #[serde(skip_serializing_if = "Option::is_none")]
1394 pub message: Option<String>,
1395 #[serde(skip_serializing_if = "Option::is_none")]
1396 pub status: Option<OrderStatus>,
1397}
1398
1399#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1400pub struct EditProfileRequest {
1401 #[serde(skip_serializing_if = "Option::is_none")]
1402 pub name: Option<String>,
1403 #[serde(skip_serializing_if = "Option::is_none")]
1404 pub home_page: Option<String>,
1405 #[serde(skip_serializing_if = "Option::is_none")]
1406 pub location: Option<String>,
1407 #[serde(skip_serializing_if = "Option::is_none")]
1408 pub profile: Option<String>,
1409 #[serde(skip_serializing_if = "Option::is_none")]
1410 pub curr_abbr: Option<Currency>,
1411}
1412
1413#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1414pub struct UserInventoryQuery {
1415 #[serde(skip_serializing_if = "Option::is_none")]
1416 pub status: Option<String>,
1417 #[serde(flatten)]
1418 pub pagination: PaginationParams,
1419 #[serde(skip_serializing_if = "Option::is_none")]
1420 pub sort: Option<String>,
1421 #[serde(skip_serializing_if = "Option::is_none")]
1422 pub sort_order: Option<SortOrder>,
1423}
1424
1425#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1426pub struct UserContributionsQuery {
1427 #[serde(flatten)]
1428 pub pagination: PaginationParams,
1429 #[serde(skip_serializing_if = "Option::is_none")]
1430 pub sort: Option<String>,
1431 #[serde(skip_serializing_if = "Option::is_none")]
1432 pub sort_order: Option<SortOrder>,
1433}
1434
1435#[derive(Debug, Clone, Serialize, Deserialize)]
1436pub struct AddFolderRequest {
1437 pub name: String,
1438}
1439
1440#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1441pub struct CollectionReleasesQuery {
1442 #[serde(flatten)]
1443 pub pagination: PaginationParams,
1444 #[serde(skip_serializing_if = "Option::is_none")]
1445 pub sort: Option<String>,
1446 #[serde(skip_serializing_if = "Option::is_none")]
1447 pub sort_order: Option<SortOrder>,
1448}
1449
1450#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1451pub struct EditCollectionReleaseRequest {
1452 #[serde(skip_serializing_if = "Option::is_none")]
1453 pub rating: Option<u8>,
1454 #[serde(skip_serializing_if = "Option::is_none")]
1455 pub folder_id: Option<u64>,
1456}
1457
1458#[derive(Debug, Clone, Serialize, Deserialize)]
1459pub struct EditInstanceNoteRequest {
1460 pub value: String,
1461}
1462
1463#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1464pub struct WantlistUpdateRequest {
1465 #[serde(skip_serializing_if = "Option::is_none")]
1466 pub notes: Option<String>,
1467 #[serde(skip_serializing_if = "Option::is_none")]
1468 pub rating: Option<u8>,
1469}