use std::{fmt, str::FromStr};
#[cfg(feature = "json_schema")]
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Copy, Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "json_schema", derive(JsonSchema))]
pub enum SigningAlg {
Es256,
Es384,
Es512,
Ps256,
Ps384,
Ps512,
Ed25519,
}
impl FromStr for SigningAlg {
type Err = UnknownAlgorithmError;
fn from_str(alg: &str) -> Result<Self, Self::Err> {
match alg {
"es256" => Ok(Self::Es256),
"es384" => Ok(Self::Es384),
"es512" => Ok(Self::Es512),
"ps256" => Ok(Self::Ps256),
"ps384" => Ok(Self::Ps384),
"ps512" => Ok(Self::Ps512),
"ed25519" => Ok(Self::Ed25519),
_ => Err(UnknownAlgorithmError(alg.to_owned())),
}
}
}
impl fmt::Display for SigningAlg {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> {
write!(
f,
"{}",
match self {
Self::Es256 => "es256",
Self::Es384 => "es384",
Self::Es512 => "es512",
Self::Ps256 => "ps256",
Self::Ps384 => "ps384",
Self::Ps512 => "ps512",
Self::Ed25519 => "ed25519",
}
)
}
}
#[derive(Debug, PartialEq, Eq)]
pub struct UnknownAlgorithmError(pub String);
impl fmt::Display for UnknownAlgorithmError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> {
write!(f, "UnknownAlgorithmError({})", self.0)
}
}
impl std::error::Error for UnknownAlgorithmError {}