soundcloud_rs/models/response/
tracks.rs

1use serde::{Deserialize, Serialize};
2
3use crate::models::response::{PagingCollection, users::UserSummary};
4
5pub type Tracks = PagingCollection<Track>;
6
7#[derive(Debug, Serialize, Deserialize, Default, Clone)]
8pub struct Track {
9    pub access: Option<String>,
10    pub artwork_url: Option<String>,
11    pub bpm: Option<f64>,
12    pub comment_count: Option<i64>,
13    pub created_at: Option<String>,
14    pub description: Option<String>,
15    pub download_url: Option<String>,
16    pub downloadable: Option<bool>,
17    pub duration: Option<i64>,
18    pub embeddable_by: Option<String>,
19    pub favoritings_count: Option<i64>,
20    pub genre: Option<String>,
21    pub id: Option<i64>,
22    pub isrc: Option<String>,
23    pub kind: Option<String>,
24    pub label_name: Option<String>,
25    pub license: Option<String>,
26    pub media: Option<Media>,
27    pub permalink_url: Option<String>,
28    pub playback_count: Option<i64>,
29    pub publisher_metadata: Option<PublisherMetadata>,
30    pub purchase_title: Option<String>,
31    pub purchase_url: Option<String>,
32    pub release: Option<String>,
33    pub release_day: Option<i32>,
34    pub release_month: Option<i32>,
35    pub release_year: Option<i32>,
36    pub reposts_count: Option<i64>,
37    pub sharing: Option<String>,
38    pub stream_url: Option<String>,
39    pub streamable: Option<bool>,
40    pub tag_list: Option<String>,
41    pub title: Option<String>,
42    pub urn: Option<String>,
43    pub user: Option<UserSummary>,
44    pub user_favorite: Option<bool>,
45    pub user_playback_count: Option<i64>,
46    pub waveform_url: Option<String>,
47}
48
49#[derive(Debug, Serialize, Deserialize, Default, Clone)]
50pub struct PublisherMetadata {
51    pub id: Option<i64>,
52    pub urn: Option<String>,
53    pub contains_music: Option<bool>,
54}
55
56#[derive(Debug, Serialize, Deserialize, Default, Clone)]
57pub struct Media {
58    pub transcodings: Option<Vec<Transcoding>>,
59}
60
61#[derive(Debug, Serialize, Deserialize, Default, Clone)]
62pub struct Transcoding {
63    pub url: Option<String>,
64    pub preset: Option<String>,
65    pub duration: Option<i64>,
66    pub snipped: Option<bool>,
67    pub format: Option<TranscodingFormat>,
68    pub quality: Option<String>,
69    pub is_legacy_transcoding: Option<bool>,
70}
71
72#[derive(Debug, Serialize, Deserialize, Default, Clone)]
73pub struct TranscodingFormat {
74    pub protocol: Option<StreamType>,
75    pub mime_type: Option<String>,
76}
77
78#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
79#[serde(rename_all = "lowercase")]
80pub enum StreamType {
81    Hls,
82    Progressive,
83    #[serde(other)]
84    None,
85}
86
87#[derive(Debug, Serialize, Deserialize, Default, Clone)]
88pub struct Stream {
89    pub url: Option<String>,
90}
91
92#[derive(Debug, Serialize, Deserialize, Default, Clone)]
93pub struct Waveform {
94    pub samples: Option<Vec<f64>>,
95    pub width: Option<i32>,
96    pub height: Option<i32>,
97}