1use serde::Deserialize;
2
3#[derive(Debug, Clone, Deserialize)]
4pub struct Claims {
5 pub sub: String,
6 #[serde(default)]
7 pub domain_roles: Vec<String>,
8 #[serde(default)]
9 pub exp: Option<u64>,
10 #[serde(default)]
11 pub iat: Option<u64>,
12}
13
14impl Claims {
15 pub fn is_subject(&self, expected_sub: &str) -> bool {
17 self.sub == expected_sub
18 }
19
20 pub fn allowed_domain_roles(&self, allowed_roles: &[&str]) -> bool {
22 allowed_roles
23 .iter()
24 .any(|role| self.domain_roles.contains(&role.to_string()))
25 }
26}