flickr_api/
test_login.rs

1use crate::*;
2
3#[derive(Deserialize, Debug, Hash)]
4struct TestLoginAnswerSuccess {
5    stat: String,
6    user: UserData,
7}
8
9#[derive(Deserialize, Debug, Hash)]
10#[serde(untagged)]
11enum TestLoginAnswer {
12    Ok(TestLoginAnswerSuccess),
13    Err(FlickrError),
14}
15
16impl Resultable<UserData, Box<dyn Error>> for TestLoginAnswer {
17    fn to_result(self) -> Result<UserData, Box<dyn Error>> {
18        match self {
19            TestLoginAnswer::Ok(TestLoginAnswerSuccess { stat: _, user }) => Ok(user),
20            TestLoginAnswer::Err(e) => Err(Box::new(e)),
21        }
22    }
23}
24
25/// User information as returned by flickr
26#[derive(Deserialize, Debug, Hash)]
27pub struct UserData {
28    pub id: String,
29    #[serde(deserialize_with = "deserialize_content")]
30    pub username: String,
31}
32
33impl TestRequestBuilder {
34    /// [flickr.test.login](https://www.flickr.com/services/api/flickr.test.login.html)
35    /// endpoint. Check the login information
36    pub async fn login(&self) -> Result<UserData, Box<dyn Error>> {
37        let mut params = vec![
38            ("method", "flickr.test.login".into()),
39            ("format", "json".into()),
40            ("nojsoncallback", "1".into()),
41        ];
42
43        oauth::build_request(
44            oauth::RequestTarget::Get(URL_API),
45            &mut params,
46            &self.handle.key,
47            self.handle.token.as_ref(),
48        );
49
50        let url = reqwest::Url::parse_with_params(URL_API, &params)?;
51        let request = self.handle.client.get(url).send().await?;
52        let login: TestLoginAnswer = request.json().await?;
53
54        login.to_result()
55    }
56}