soundcloud_rs/models/response/
tracks.rs1use 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}