| 111 | #[test] |
| 112 | #[wasm_bindgen_test] |
| 113 | fn encode_with_extra_non_string_header() { |
| 114 | let my_claims = Claims { |
| 115 | sub: "b@b.com".to_string(), |
| 116 | company: "ACME".to_string(), |
| 117 | exp: OffsetDateTime::now_utc().unix_timestamp() + 10000, |
| 118 | }; |
| 119 | let foo: u32 = 1; |
| 120 | let bar: i32 = -2345; |
| 121 | let mut extras = Extras::default(); |
| 122 | extras.insert("foo", foo); |
| 123 | extras.insert("bar", bar); |
| 124 | let header = Header { extras, ..Default::default() }; |
| 125 | let token = encode(&header, &my_claims, &EncodingKey::from_secret(b"secret")).unwrap(); |
| 126 | let token_data = decode::<Claims>( |
| 127 | &token, |
| 128 | &DecodingKey::from_secret(b"secret"), |
| 129 | &Validation::new(Algorithm::HS256), |
| 130 | ) |
| 131 | .unwrap(); |
| 132 | let extras = token_data.header.extras; |
| 133 | assert_eq!(extras.inner().len(), 2); |
| 134 | assert_eq!(extras.get("foo").unwrap(), Some(foo)); |
| 135 | assert_eq!(extras.get("bar").unwrap(), Some(bar)); |
| 136 | assert!(extras.get::<bool>("baz").unwrap().is_none()); |
| 137 | assert!(extras.get::<u32>("bar").is_err_and(|e| { |
| 138 | match e.into_kind() { |
| 139 | ErrorKind::Json(error) => error.is_data(), |
| 140 | _ => false, |
| 141 | } |
| 142 | })); |
| 143 | } |
| 144 | |
| 145 | #[test] |
| 146 | #[wasm_bindgen_test] |