use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq)]
pub struct Permissions {
#[serde(default)]
pub full_access: bool,
#[serde(default)]
pub read: Vec<String>,
#[serde(default)]
pub write: Vec<String>,
}
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq)]
pub struct Token {
pub name: String,
pub value: String,
pub created_at: DateTime<Utc>,
pub permissions: Option<Permissions>,
pub is_provisioned: bool,
pub expires_at: Option<DateTime<Utc>>,
#[serde(default)]
pub ttl: Option<u64>,
pub last_access: Option<DateTime<Utc>>,
#[serde(default)]
pub ip_allowlist: Vec<String>,
#[serde(default)]
pub is_expired: bool,
}
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq)]
pub struct TokenCreateRequest {
pub permissions: Permissions,
#[serde(default)]
pub expires_at: Option<DateTime<Utc>>,
#[serde(default)]
pub ttl: Option<u64>,
#[serde(default)]
pub ip_allowlist: Vec<String>,
}
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq)]
pub struct TokenCreateResponse {
pub value: String,
pub created_at: DateTime<Utc>,
}
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq)]
pub struct TokenList {
pub tokens: Vec<Token>,
}