ddex_core/models/flat/
release.rs

1// core/src/models/flat/release.rs
2//! Parsed release types
3
4use 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    /// Extensions for parsed release
32    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}