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