jwt_rustcrypto/
algorithm.rs1use 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}