tower_oauth2_resource_server/
claims.rs1use std::fmt::Display;
2
3use serde::{Deserialize, Serialize};
4use serde_with::{OneOrMany, formats::PreferMany, serde_as};
5
6#[serde_as]
7#[derive(Clone, Debug, Deserialize, Serialize)]
8pub struct DefaultClaims {
9 pub iss: Option<String>,
10 pub sub: Option<String>,
11 #[serde_as(as = "OneOrMany<_, PreferMany>")]
12 #[serde(default)]
13 pub aud: Vec<String>,
14 pub jti: Option<String>,
15}
16
17impl Display for DefaultClaims {
18 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
19 write!(f, "{:?}", self)
20 }
21}
22
23#[cfg(test)]
24mod tests {
25 use super::*;
26
27 #[test]
28 fn single_aud() {
29 let raw_claims = "{ \"aud\": \"single\" }";
30 let claims: DefaultClaims = serde_json::from_str(raw_claims).unwrap();
31 assert_eq!(claims.aud.len(), 1);
32 assert_eq!(claims.aud.first().unwrap(), "single");
33 }
34
35 #[test]
36 fn multiple_aud() {
37 let raw_claims = "{ \"aud\": [\"first\", \"second\"] }";
38 let claims: DefaultClaims = serde_json::from_str(raw_claims).unwrap();
39 assert_eq!(claims.aud.len(), 2);
40 assert_eq!(claims.aud.first().unwrap(), "first");
41 assert_eq!(claims.aud.get(1).unwrap(), "second");
42 }
43}