use std::error::Error;
use crate::crud::error::DEVOPS_ERROR_MESSAGE;
use reqwest::Method;
use crate::{
DisplayFilterOption, PatToken, PatTokenGetRequest, PatTokenListRequest, PatTokenManager,
PatTokenResult,
};
impl PatTokenManager {
pub async fn get_pat_token(
&self,
get_request: PatTokenGetRequest,
) -> Result<PatToken, Box<dyn Error>> {
let response = self
.base_request(Method::GET, &self.pat_url)
.query(&[("authorizationId", get_request.authorization_id)])
.send()
.await?;
log::debug!("Response: {:#?}", response);
match response.error_for_status() {
Ok(response) => {
log::debug!("{:#?}", response);
let lt_result = response.json::<PatTokenResult>().await?;
Ok(lt_result.pat_token)
}
Err(e) => {
log::debug!("Error: {:#?}", e);
if let Some(status) = e.status()
&& status.is_client_error()
{
return Err::<PatToken, Box<dyn Error>>(DEVOPS_ERROR_MESSAGE.into());
}
Err::<PatToken, Box<dyn Error>>(Box::new(e))
}
}
}
pub async fn get_pat_token_by_name(
&self,
name: &str,
) -> Result<Option<PatToken>, Box<dyn Error>> {
let list_request = PatTokenListRequest {
display_filter_option: DisplayFilterOption::All,
};
let pat_tokens = self.list_pat_tokens(list_request).await?;
Ok(pat_tokens
.into_iter()
.find(|pat_token| pat_token.display_name == name))
}
}