use serde::Serialize;
use crate::error::Result;
use crate::model::user::AccessToken;
#[derive(Debug, Clone, Serialize)]
pub struct CreateAccessTokenBuilder {
#[serde(skip)]
pub user: String,
pub name: String,
pub scopes: Vec<String>,
}
#[derive(Debug, Clone)]
pub struct DeleteAccessTokenBuilder {
pub user: String,
pub token: String,
}
impl CreateAccessTokenBuilder {
pub fn new(user: impl ToString, name: impl ToString, scopes: Vec<impl ToString>) -> Self {
Self {
user: user.to_string(),
name: name.to_string(),
scopes: scopes.into_iter().map(|s| s.to_string()).collect(),
}
}
pub async fn send(&self, client: &crate::Client) -> Result<AccessToken> {
let username = &self.user;
let req = client
.post(format!("users/{username}/tokens"))
.json(self)
.build()?;
let res = client.make_request(req).await?;
client.parse_response(res).await
}
}
impl DeleteAccessTokenBuilder {
pub fn new(user: impl ToString, token: impl ToString) -> Self {
Self {
user: user.to_string(),
token: token.to_string(),
}
}
pub async fn send(&self, client: &crate::Client) -> Result<()> {
let DeleteAccessTokenBuilder { user, token } = self;
let req = client
.delete(format!("users/{user}/tokens/{token}"))
.build()?;
client.make_request(req).await?;
Ok(())
}
}