jwt_rustcrypto/
algorithm.rs

1use serde::{Deserialize, Serialize};
2use std::str::FromStr;
3
4#[derive(Clone, Copy, Hash, PartialEq, Eq, Debug, Serialize, Deserialize)]
5pub enum Algorithm {
6    HS256,
7    HS384,
8    HS512,
9    RS256,
10    RS384,
11    RS512,
12    PS256,
13    PS384,
14    PS512,
15    ES256,
16    ES256K,
17    ES384,
18    ES512,
19}
20
21impl std::fmt::Display for Algorithm {
22    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
23        let alg_str = match self {
24            Algorithm::HS256 => "HS256",
25            Algorithm::HS384 => "HS384",
26            Algorithm::HS512 => "HS512",
27            Algorithm::RS256 => "RS256",
28            Algorithm::RS384 => "RS384",
29            Algorithm::RS512 => "RS512",
30            Algorithm::PS256 => "PS256",
31            Algorithm::PS384 => "PS384",
32            Algorithm::PS512 => "PS512",
33            Algorithm::ES256 => "ES256",
34            Algorithm::ES256K => "ES256K",
35            Algorithm::ES384 => "ES384",
36            Algorithm::ES512 => "ES512",
37        };
38        write!(f, "{}", alg_str)
39    }
40}
41
42impl FromStr for Algorithm {
43    type Err = String;
44
45    fn from_str(s: &str) -> Result<Self, Self::Err> {
46        match s {
47            "HS256" => Ok(Algorithm::HS256),
48            "HS384" => Ok(Algorithm::HS384),
49            "HS512" => Ok(Algorithm::HS512),
50            "RS256" => Ok(Algorithm::RS256),
51            "RS384" => Ok(Algorithm::RS384),
52            "RS512" => Ok(Algorithm::RS512),
53            "ES256" => Ok(Algorithm::ES256),
54            "ES384" => Ok(Algorithm::ES384),
55            "ES512" => Ok(Algorithm::ES512),
56            _ => Err(format!("Unsupported algorithm: {}", s)),
57        }
58    }
59}