use oauth2::{basic::BasicClient, RefreshToken, TokenResponse};
use super::{Error, Result};
#[derive(Debug, Default)]
pub struct RefreshAccessToken;
impl RefreshAccessToken {
pub fn new() -> Self {
Self
}
pub async fn refresh_access_token(
&self,
client: &BasicClient,
refresh_token: impl ToString,
) -> Result<(String, Option<String>)> {
let res = client
.exchange_refresh_token(&RefreshToken::new(refresh_token.to_string()))
.request_async(oauth2::reqwest::async_http_client)
.await
.map_err(Error::RefreshAccessTokenError)?;
let access_token = res.access_token().secret().to_owned();
let refresh_token = res.refresh_token().map(|t| t.secret().clone());
Ok((access_token, refresh_token))
}
}