extern crate jsonwebtoken as jwt; extern crate rustc_serialize; use jwt::{encode, decode, Header, Algorithm}; use jwt::errors::{Error}; #[derive(Debug, RustcEncodable, RustcDecodable)] struct Claims { sub: String, company: String } // Example validation implementation impl Claims { fn is_valid(self) -> bool { if self.company != "ACME".to_owned() { return false; } // expiration etc true } } fn main() { let my_claims = Claims { sub: "b@b.com".to_owned(), company: "ACME".to_owned() }; let key = "secret"; let token = match encode(&my_claims, key.as_ref(), Header::default()) { Ok(t) => t, Err(_) => panic!() // in practice you would return the error }; let token_data = match decode::(&token, key.as_ref(), Algorithm::HS256) { Ok(c) => c, Err(err) => match err { Error::InvalidToken => panic!(), // Example on how to handle a specific error _ => panic!() } }; println!("{:?}", token_data.claims); println!("{:?}", token_data.header); println!("{:?}", token_data.claims.is_valid()); }