pcloud/general/
gettoken.rs

1#[derive(Debug, serde::Deserialize)]
2pub struct Token {
3    #[serde(rename = "auth")]
4    pub value: String,
5}
6
7#[derive(serde::Serialize)]
8struct Params {
9    getauth: u8,
10}
11
12impl Default for Params {
13    fn default() -> Self {
14        Self { getauth: 1 }
15    }
16}
17
18impl crate::Client {
19    /// Generate a new token based on the provided credentials
20    ///
21    /// # Returns
22    ///
23    /// A [`Digest`] struct containing the digest itself
24    ///
25    /// # Errors
26    ///
27    /// Returns a [`crate::Error`] if the folder cannot be listed.
28    ///
29    /// # Examples
30    ///
31    /// ```
32    /// # async fn example(client: &pcloud::Client) -> Result<(), pcloud::Error> {
33    /// let value = client.get_digest().await?;
34    /// println!("{:?}", value);
35    /// # Ok(())
36    /// # }
37    /// ```
38    pub async fn get_token(&self) -> crate::Result<String> {
39        self.get_request::<Token, _>("userinfo", &Params::default())
40            .await
41            .map(|token| token.value)
42    }
43}
44
45#[cfg(test)]
46mod tests {
47    use crate::{Client, Credentials};
48    use mockito::Matcher;
49
50    #[tokio::test]
51    async fn success() {
52        let mut server = mockito::Server::new_async().await;
53        let m = server.mock("GET", "/getdigest")
54            .match_query(Matcher::Missing)
55            .with_status(200)
56            .with_body(r#"{"result": 0, "digest": "YGtAxbUpI85Zvs7lC7Z62rBwv907TBXhV2L867Hkh", "expires": "Fri, 27 Sep 2013 10:15:46 +0000"}"#)
57            .create_async().await;
58        let client = Client::new(server.url(), Credentials::anonymous()).unwrap();
59        let result = client.get_digest().await.unwrap();
60        assert_eq!(result.value, "YGtAxbUpI85Zvs7lC7Z62rBwv907TBXhV2L867Hkh");
61        m.assert_async().await;
62    }
63}