pcloud/general/
getdigest.rs

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