ddex_core/models/flat/
release.rs1use serde::{Deserialize, Serialize};
5use chrono::{DateTime, Utc};
6use crate::models::{Extensions, common::{LocalizedString, Copyright}};
7use super::{ParsedTrack, ParsedImage, ParsedVideo, TerritoryInfo};
8
9#[derive(Debug, Clone, Serialize, Deserialize)]
10pub struct ParsedRelease {
11 pub release_id: String,
12 pub identifiers: ReleaseIdentifiers,
13 pub title: Vec<LocalizedString>,
14 pub default_title: String,
15 pub subtitle: Option<Vec<LocalizedString>>,
16 pub default_subtitle: Option<String>,
17 pub display_artist: String,
18 pub artists: Vec<ArtistInfo>,
19 pub release_type: String,
20 pub genre: Option<String>,
21 pub sub_genre: Option<String>,
22 pub tracks: Vec<ParsedTrack>,
23 pub track_count: usize,
24 pub disc_count: Option<usize>,
25 pub videos: Vec<ParsedVideo>,
26 pub images: Vec<ParsedImage>,
27 pub cover_art: Option<ParsedImage>,
28 pub release_date: Option<DateTime<Utc>>,
29 pub original_release_date: Option<DateTime<Utc>>,
30 pub territories: Vec<TerritoryInfo>,
31 pub extensions: Option<Extensions>,
33 pub p_line: Option<Copyright>,
34 pub c_line: Option<Copyright>,
35 pub parent_release: Option<String>,
36 pub child_releases: Vec<String>,
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize)]
40pub struct ReleaseIdentifiers {
41 pub upc: Option<String>,
42 pub ean: Option<String>,
43 pub catalog_number: Option<String>,
44 pub grid: Option<String>,
45 pub proprietary: Vec<ProprietaryId>,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
49pub struct ProprietaryId {
50 pub namespace: String,
51 pub value: String,
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize)]
55pub struct ArtistInfo {
56 pub name: String,
57 pub role: String,
58 pub party_id: Option<String>,
59}