wrapper-jsonwebtoken 0.1.1

wrapper
Documentation
use chrono::Utc;
use darth_rust::DarthRust;
use jsonwebtoken::{decode, encode, DecodingKey, EncodingKey, Header, Validation};
use serde::{Deserialize, Serialize};
use serde_json::Value;

#[derive(Serialize, Deserialize, PartialEq, Debug, DarthRust, Clone)]
pub struct Token {
    pub items: Value,
    pub exp: usize,
}

#[derive(Serialize, Deserialize, PartialEq, Debug, DarthRust, Clone)]
pub struct WrapperJWT {
    pub token: String,
    pub secret: String,
    pub items: Option<Value>,
    pub exp: usize,
}

pub trait JsonwebtokenTrait {
    fn hs256_decode(&self) -> Result<Token, jsonwebtoken::errors::Error>;
    fn hs384_decode(&self) -> Result<Token, jsonwebtoken::errors::Error>;
    fn hs512_decode(&self) -> Result<Token, jsonwebtoken::errors::Error>;
    fn hs256_encode(&self) -> Result<String, jsonwebtoken::errors::Error>;
    fn hs384_encode(&self) -> Result<String, jsonwebtoken::errors::Error>;
    fn hs512_encode(&self) -> Result<String, jsonwebtoken::errors::Error>;
}

impl JsonwebtokenTrait for WrapperJWT {
    fn hs256_decode(&self) -> Result<Token, jsonwebtoken::errors::Error> {
        let token = &self.token;
        let secret = &self.secret;
        let res = decode::<Token>(
            token,
            &DecodingKey::from_secret(secret.as_ref()),
            &Validation::new(jsonwebtoken::Algorithm::HS256),
        )?;
        Ok(res.claims)
    }
    fn hs384_decode(&self) -> Result<Token, jsonwebtoken::errors::Error> {
        let token = &self.token;
        let secret = &self.secret;
        let res = decode::<Token>(
            token,
            &DecodingKey::from_secret(secret.as_ref()),
            &Validation::new(jsonwebtoken::Algorithm::HS384),
        )?;
        Ok(res.claims)
    }
    fn hs512_decode(&self) -> Result<Token, jsonwebtoken::errors::Error> {
        let token = &self.token;
        let secret = &self.secret;
        let res = decode::<Token>(
            token,
            &DecodingKey::from_secret(secret.as_ref()),
            &Validation::new(jsonwebtoken::Algorithm::HS512),
        )?;
        Ok(res.claims)
    }
    fn hs256_encode(&self) -> Result<String, jsonwebtoken::errors::Error> {
        let secret = &self.secret;
        let exp = &self.exp;
        let items = self.items.as_ref().expect("items must be provided");
        let now = Utc::now().timestamp() as usize;
        let exp = now + exp;
        let my_claims = Token::new(items.clone(), exp);
        let header = Header::new(jsonwebtoken::Algorithm::HS256);
        encode(&header, &my_claims, &EncodingKey::from_secret(secret.as_ref()))
    }
    fn hs384_encode(&self) -> Result<String, jsonwebtoken::errors::Error> {
        let secret = &self.secret;
        let exp = &self.exp;
        let items = self.items.as_ref().expect("items must be provided");
        let now = Utc::now().timestamp() as usize;
        let exp = now + exp;
        let my_claims = Token::new(items.clone(), exp);
        let header = Header::new(jsonwebtoken::Algorithm::HS384);
        encode(&header, &my_claims, &EncodingKey::from_secret(secret.as_ref()))
    }
    fn hs512_encode(&self) -> Result<String, jsonwebtoken::errors::Error> {
        let secret = &self.secret;
        let exp = &self.exp;
        let items = self.items.as_ref().expect("items must be provided");
        let now = Utc::now().timestamp() as usize;
        let exp = now + exp;
        let my_claims = Token::new(items.clone(), exp);
        let header = Header::new(jsonwebtoken::Algorithm::HS512);
        encode(&header, &my_claims, &EncodingKey::from_secret(secret.as_ref()))
    }
}