use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use crate::{Authentication, ClientExecutor, RequestBuilder};
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TokenInfo {
pub id: String,
pub name: String,
pub permissions: Vec<TokenPermission>,
#[serde(rename = "type")]
pub kind: TokenKind,
#[serde(default)]
pub expires_at: Option<DateTime<Utc>>,
pub issued_at: Option<DateTime<Utc>>,
pub urls: Option<Vec<String>>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum TokenPermission {
Account,
Builds,
Characters,
Guilds,
Inventories,
Progression,
Pvp,
TradingPost,
Unlocks,
Wallet,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum TokenKind {
ApiKey,
Subtoken,
}
impl TokenInfo {
pub fn get<C>(client: &C) -> C::Result
where
C: ClientExecutor<Self>,
{
client.send(RequestBuilder::new("/v2/tokeninfo").authenticated(Authentication::Required))
}
}