use thiserror::Error;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Kid {
Cur,
Prev,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Payload {
pub purpose: String,
pub subject: String,
pub exp: Option<u64>,
pub kid: Kid,
}
#[derive(Debug, Clone, PartialEq, Eq, Error)]
pub enum SignatureError {
#[error("token payload is not valid UTF-8/JSON")]
Malformed,
#[error("token is expired")]
Expired,
#[error("token purpose {actual:?} does not match expected {expected:?}")]
WrongPurpose { actual: String, expected: String },
}
pub trait Signer: Send + Sync {
fn sign(&self, payload: &Payload) -> String;
fn verify(&self, token: &str, expected_purpose: &str) -> Option<Payload>;
}