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}