oauth/v2_0/
refresh_access_token.rs1use oauth2::{RefreshToken, TokenResponse};
5
6use super::{Client, Error, Result};
7
8#[derive(Debug, Default)]
13pub struct RefreshAccessToken;
14
15impl RefreshAccessToken {
16 pub fn new() -> Self {
17 Self
18 }
19
20 pub async fn refresh_access_token(
21 &self,
22 client: &Client,
23 refresh_token: impl ToString,
24 ) -> Result<(String, Option<String>)> {
25 let res = client
26 .exchange_refresh_token(&RefreshToken::new(refresh_token.to_string()))
27 .request_async(&Client::send_oauth2_request)
28 .await
29 .map_err(Box::new)
30 .map_err(Error::RefreshAccessTokenError)?;
31
32 let access_token = res.access_token().secret().to_owned();
33 let refresh_token = res.refresh_token().map(|t| t.secret().clone());
34
35 Ok((access_token, refresh_token))
36 }
37}