discogs_api/endpoints/
release_rating_by_user.rs1use super::Endpoint;
2use crate::{data_types::Fallible, Error};
3use reqwest::Url;
4
5pub struct ReleaseRatingByUser;
6
7#[derive(Debug, Clone, Copy)]
8pub struct Params<'a> {
9 pub release_id: isize,
10 pub username: &'a str,
11}
12
13impl<'de> Endpoint<'de> for ReleaseRatingByUser {
14 type Parameters = Params<'de>;
15 type ReturnType = Fallible<crate::data_types::ReleaseRatingByUser>;
16
17 fn build_url(base: &Url, params: Self::Parameters) -> Result<Url, Error> {
18 base.join(&format!(
19 "/releases/{}/rating/{}",
20 params.release_id, params.username
21 ))
22 .map_err(|_| Error::UrlError)
23 }
24}
25
26#[cfg(test)]
27mod tests {
28 use super::*;
29 use crate::Client;
30
31 #[test]
32 fn empty_username() {
33 let params = Params {
34 release_id: 27651927,
35 username: "",
36 };
37
38 let resp = Client::builder()
39 .build()
40 .unwrap()
41 .get::<ReleaseRatingByUser>(params)
42 .unwrap();
43 let resp = resp.to_result().expect_err("expected failure");
44
45 assert_eq!(resp.as_str(), "The requested resource was not found.");
46 }
47
48 #[test]
49 fn with_username() {
50 let params = Params {
51 release_id: 27651927,
52 username: "br3adina7or",
53 };
54
55 let resp = Client::builder()
56 .build()
57 .unwrap()
58 .get::<ReleaseRatingByUser>(params)
59 .unwrap();
60 let resp = resp.to_result().expect("expected ok");
61 assert_eq!(resp.release_id, params.release_id);
62 assert_eq!(&resp.username, params.username);
63 }
64}