jwk_set/
lib.rs

1//! https://datatracker.ietf.org/doc/html/rfc7517#section-5
2
3pub use jsonwebkey;
4
5use jsonwebkey::JsonWebKey;
6use serde::{Deserialize, Serialize};
7
8#[cfg(feature = "with-decrypt")]
9pub mod decrypt;
10
11//
12//
13//
14#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, Default)]
15pub struct JsonWebKeySet {
16    pub keys: Vec<JsonWebKey>,
17}
18
19#[cfg(feature = "serde_json")]
20impl std::str::FromStr for JsonWebKeySet {
21    type Err = serde_json::Error;
22    fn from_str(json: &str) -> Result<Self, Self::Err> {
23        serde_json::from_str(json)
24    }
25}
26
27#[cfg(test)]
28mod tests {
29    use super::*;
30
31    #[test]
32    fn test_de_with_apple_oidc() {
33        let jwk_set = serde_json::from_str::<JsonWebKeySet>(include_str!(
34            "../tests/oidc_keys_json_files/apple.json"
35        ))
36        .unwrap();
37        assert_eq!(jwk_set.keys.len(), 3);
38    }
39
40    #[test]
41    fn test_de_with_gitlab_oidc() {
42        let jwk_set = serde_json::from_str::<JsonWebKeySet>(include_str!(
43            "../tests/oidc_keys_json_files/gitlab.json"
44        ))
45        .unwrap();
46        assert_eq!(jwk_set.keys.len(), 2);
47    }
48
49    #[test]
50    fn test_de_with_google_oidc() {
51        let jwk_set = serde_json::from_str::<JsonWebKeySet>(include_str!(
52            "../tests/oidc_keys_json_files/google.json"
53        ))
54        .unwrap();
55        assert_eq!(jwk_set.keys.len(), 3);
56    }
57
58    #[test]
59    fn test_de_with_microsoft_oidc() {
60        let jwk_set = serde_json::from_str::<JsonWebKeySet>(include_str!(
61            "../tests/oidc_keys_json_files/microsoft.json"
62        ))
63        .unwrap();
64        assert_eq!(jwk_set.keys.len(), 7);
65    }
66
67    #[test]
68    fn test_de_with_yahoo_oidc() {
69        let jwk_set = serde_json::from_str::<JsonWebKeySet>(include_str!(
70            "../tests/oidc_keys_json_files/yahoo.json"
71        ))
72        .unwrap();
73        assert_eq!(jwk_set.keys.len(), 3);
74    }
75}