sinan 0.1.0

A Boilerplate for Rapid Axum Web Service Deployment.
Documentation
use http::header::AUTHORIZATION;
use http::{HeaderMap, HeaderValue};
use jsonwebtoken::errors::{Error, ErrorKind};
use serde::Serialize;

#[derive(Debug, Serialize)]
pub struct Token {
    #[serde(rename(serialize = "access_token"))]
    value: String,
    expire: i64,
}

impl Token {
    pub fn new(value: String, expire: i64) -> Self {
        Self { value, expire }
    }

    pub fn parse_from_header(headers: &HeaderMap<HeaderValue>) -> eyre::Result<&str, Error> {
        let auth_header = headers
            .get(AUTHORIZATION)
            .and_then(|header| header.to_str().ok())
            .ok_or(Error::from(ErrorKind::MissingRequiredClaim(
                "Authorization".to_owned(),
            )))?;

        if !auth_header.starts_with("Bearer ") {
            return Err(Error::from(ErrorKind::InvalidToken));
        }

        Ok(auth_header["Bearer ".len()..].trim_start())
    }
}