use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "UPPERCASE")]
pub enum Algorithm {
HS256,
HS384,
HS512,
RS256,
RS384,
RS512,
ES256,
ES384,
ES512,
EdDSA,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Header {
pub alg: Algorithm,
#[serde(default)]
pub typ: Option<String>,
#[serde(default)]
pub kid: Option<String>,
#[serde(flatten)]
pub extra: serde_json::Map<String, Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Claims(pub serde_json::Map<String, Value>);
impl Claims {
pub fn get(&self, k: &str) -> Option<&Value> { self.0.get(k) }
pub fn map(&self) -> &serde_json::Map<String, Value> { &self.0 }
pub fn map_mut(&mut self) -> &mut serde_json::Map<String, Value> { &mut self.0 }
}
#[derive(Debug, Clone)]
pub struct Jwt {
pub header: Header,
pub claims: Claims,
pub signature_b64: String,
pub raw_header_b64: String,
pub raw_payload_b64: String,
}
#[cfg(feature = "explain")]
#[derive(Debug, Clone)]
pub struct Explanation {
pub steps: Vec<String>,
}