use bon::Builder;
use crate::{jwt::ConfirmationClaim, platform::SystemTime};
#[non_exhaustive]
#[derive(Debug, Builder)]
pub struct ValidatedJwt<Claims> {
pub issuer: Option<String>,
pub subject: Option<String>,
pub audience: Vec<String>,
pub jti: Option<String>,
pub issued_at: Option<SystemTime>,
pub expiration: Option<SystemTime>,
pub cnf: Option<ConfirmationClaim>,
pub claims: Claims,
}
impl<Claims> ValidatedJwt<Claims> {
pub fn map_claims<C1, F>(self, f: F) -> ValidatedJwt<C1>
where
F: FnOnce(Claims) -> C1,
{
ValidatedJwt {
issuer: self.issuer,
subject: self.subject,
audience: self.audience,
jti: self.jti,
issued_at: self.issued_at,
expiration: self.expiration,
cnf: self.cnf,
claims: f(self.claims),
}
}
pub fn try_map_claims<C1, E, F>(self, f: F) -> Result<ValidatedJwt<C1>, E>
where
F: FnOnce(Claims) -> Result<C1, E>,
{
Ok(ValidatedJwt {
issuer: self.issuer,
subject: self.subject,
audience: self.audience,
jti: self.jti,
issued_at: self.issued_at,
expiration: self.expiration,
cnf: self.cnf,
claims: f(self.claims)?,
})
}
}