1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#[derive(Serialize, Deserialize, Debug)]
#[doc(hidden)]
pub struct Response<T> {
    pub headers: ResponseHeaders,
    pub results: Vec<T>
}

#[derive(Serialize, Deserialize, Debug)]
#[doc(hidden)]
pub struct ResponseHeaders {
    pub status: String,
    pub code: u32,
    pub error_message: String,
    pub warnings: String,
    pub results_count: u32,
}

/// A album resource
#[derive(Serialize, Deserialize, Debug)]
pub struct Album {
    pub id: u32,
    pub name: String,
    pub releasedate: String,
    pub artist_id: String,
    pub artist_name: String,
    pub image: String,
    pub zip: String,
    pub shorturl: String,
    pub shareurl: String,
}

/// A artist resource
#[derive(Serialize, Deserialize, Debug)]
pub struct Artist {
    pub id: u32,
    pub name: String,
    pub website: String,
    pub joindate: String,
    pub image: String,
    pub shorturl: String,
    pub shareurl: String,
}

/// A track resource
#[derive(Serialize, Deserialize, Debug)]
pub struct Track {
    pub id: u32,
    pub name: String,
    pub duration: u32,
    pub artist_id: String,
    pub artist_name: String,
    pub artist_idstr: String,
    pub album_name: String,
    pub album_id: String,
    pub license_ccurl: String,
    pub position: u32,
    pub releasedate: String,
    pub album_image: String,
    pub audio: String,
    pub audiodownload: String,
    pub prourl: String,
    pub shorturl: String,
    pub shareurl: String,
    pub image: String,
    //pub musicinfo:
}

/// Album returned by users/albums
#[derive(Serialize, Deserialize, Debug)]
pub struct PartialAlbum {
    pub id: u32,
    pub name: String,
    pub releasedate: String,
    pub artist_id: u32,
    pub artist_name: String,
    pub updatedate: String,
    pub image: String,
    //TODO pub relations: Relations
}

#[derive(Serialize, Deserialize, Debug)]
pub struct UsersAlbums {
    pub name: String,
    pub dispname: String,
    pub id: u32,
    pub lang: String,
    pub creationdate: String,
    pub image: String,
    pub albums: Vec<PartialAlbum>
}

/// Artist returned by users/artists
#[derive(Serialize, Deserialize, Debug)]
pub struct PartialArtist {
    pub id: u32,
    pub name: String,
    pub image: String,
    pub joindate: String,
    pub updatedate: String,
    //TODO pub relations: Relations
}

#[derive(Serialize, Deserialize, Debug)]
pub struct UsersArtists {
    pub name: String,
    pub dispname: String,
    pub id: u32,
    pub lang: String,
    pub creationdate: String,
    pub image: String,
    pub artists: Vec<PartialArtist>
}

/// Track returned by users/tracks
#[derive(Serialize, Deserialize, Debug)]
pub struct PartialTrack {
    pub id: u32,
    pub name: String,
    pub album_id: u32,
    pub artist_id: u32,
    pub duration: u32,
    pub license_ccurl: String,
    pub updatedate: String,
    pub album_image: String,
    pub image: String,
    pub audio: String,
    pub audiodownload: String,
    pub relations: TrackRelations,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct TrackRelations {
    pub review: u32,
    pub favorite: u32,
    pub like: u32,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct UsersTracks {
    pub name: String,
    pub dispname: String,
    pub id: u32,
    pub lang: String,
    pub creationdate: String,
    pub tracks: Vec<PartialTrack>
}