use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StandardClaims {
#[serde(skip_serializing_if = "Option::is_none")]
pub sub: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub iss: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub aud: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
with = "chrono::serde::ts_seconds_option"
)]
pub exp: Option<DateTime<Utc>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
with = "chrono::serde::ts_seconds_option"
)]
pub iat: Option<DateTime<Utc>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub jti: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub role: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub permissions: Vec<String>,
#[serde(flatten)]
pub extra: HashMap<String, serde_json::Value>,
}
impl Default for StandardClaims {
fn default() -> Self {
Self {
sub: None,
iss: None,
aud: None,
exp: None,
iat: None,
jti: None,
role: None,
permissions: Vec::new(),
extra: HashMap::new(),
}
}
}