ddex_core/models/flat/
release.rs

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