Skip to main content

json_web_tolkien/
lib.rs

1//! Deserialization/Serialization of JWS for JWT.
2//!
3//! This crate provides structs and ser(de) for json web tokens and
4//! json web signatures.
5//!
6//! It does not supply signature verification, this allows you to choose
7//! and maintain the specific algorithm libraries that handle signature
8//! verification.
9//!
10//! # Example
11//!
12//! ```rust
13//!
14//! use json_web_token::prelude::*;
15//! use serde::Deserialize;
16//! use serde::de::{value, IntoDeserializer};
17//! use std::borrow::Cow;
18//!
19//! type Token = Jwt<Claims, Header>;
20//!
21//! #[derive(Deserialize)]
22//! struct Header {
23//!     #[serde(alias = "alg")]
24//!     algorithm: Algorithm
25//! }
26//!
27//! #[derive(Deserialize)]
28//! pub struct Claims {
29//!     #[serde(alias = "sub")]
30//!     user_id: String,
31//! }
32//!
33//! fn decode(input: &str) -> Result<(Jws, Token), value::Error> {
34//!
35//!     let jws : Jws;
36//!     let jwt : Token;
37//!
38//!     {
39//!         let de = input.into_deserializer();
40//!         jws = Jws::deserialize(de)?;
41//!     }
42//!
43//!     {
44//!         let encoded_token : Cow<str> = jws.encoded_token();
45//!         let de = encoded_token.as_ref().into_deserializer();
46//!
47//!         jwt = Token::deserialize(de)?;
48//!     }
49//!
50//!     Ok((jws, jwt))
51//! }
52//!
53//! let valid_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30";
54//!
55//! let (jws, jwt) = decode(&valid_token).unwrap();
56//!
57//! let signature : Cow<[u8]> = jws.signature();
58//!
59//! let claims : &Claims = jwt.claims();
60//! let header : &Header = jwt.header();
61//! ```
62
63pub mod algorithm;
64pub mod error;
65pub mod jws;
66pub mod jwt;
67pub mod numeric_date;
68pub mod ser;
69pub mod util;
70
71pub mod prelude {
72    pub use crate::{algorithm::Algorithm, jws::Jws, jwt::Jwt, numeric_date::NumericDate};
73}