ddex_core/models/flat/
track.rs1use serde::{Deserialize, Serialize};
5use std::time::Duration;
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct ParsedTrack {
9    pub track_id: String,
10    pub isrc: Option<String>,
11    pub iswc: Option<String>,
12    pub position: usize,
13    pub track_number: Option<i32>,
14    pub disc_number: Option<i32>,
15    pub side: Option<String>,
16    pub title: String,
17    pub subtitle: Option<String>,
18    pub display_artist: String,
19    pub artists: Vec<ArtistInfo>,
20    pub duration: Duration,
21    pub duration_formatted: String,
22    pub file_format: Option<String>,
23    pub bitrate: Option<i32>,
24    pub sample_rate: Option<i32>,
25    pub is_hidden: bool,
26    pub is_bonus: bool,
27    pub is_explicit: bool,
28    pub is_instrumental: bool,
29}
30
31use crate::models::flat::release::ArtistInfo;
32
33impl ParsedTrack {
34    pub fn format_duration(duration: Duration) -> String {
35        let total_seconds = duration.as_secs();
36        let minutes = total_seconds / 60;
37        let seconds = total_seconds % 60;
38        format!("{}:{:02}", minutes, seconds)
39    }
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize)]
43pub struct ParsedResource {
44    pub resource_id: String,
45    pub resource_type: String,
46    pub title: String,
47    pub duration: Option<Duration>,
48    pub technical_details: TechnicalInfo,
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize)]
52pub struct TechnicalInfo {
53    pub file_format: Option<String>,
54    pub bitrate: Option<i32>,
55    pub sample_rate: Option<i32>,
56    pub file_size: Option<u64>,
57}
58
59#[derive(Debug, Clone, Serialize, Deserialize)]
60pub struct ParsedImage {
61    pub image_id: String,
62    pub image_type: String,
63    pub width: Option<u32>,
64    pub height: Option<u32>,
65    pub file_format: Option<String>,
66}
67
68#[derive(Debug, Clone, Serialize, Deserialize)]
69pub struct ParsedVideo {
70    pub video_id: String,
71    pub video_type: String,
72    pub duration: Option<Duration>,
73    pub resolution: Option<String>,
74}