1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//! DKIM Algorithms

/// DKIM Algorithms per IANA and RFC
#[derive(Clone, Debug, PartialEq)]
#[allow(non_camel_case_types)]
pub enum DkimAlgorithm<'hdr> {
    /// Do not use
    Rsa_Sha1,
    /// Widely supported
    Rsa_Sha256,
    /// Please support this - not widely supported yet
    Ed25519_Sha256,
    /// Unknown algorithm not specified by RFC / IANA
    Unknown(&'hdr str),
}

use crate::error::DkimAlgorithmError;

impl<'hdr> TryFrom<&'hdr str> for DkimAlgorithm<'hdr> {
    type Error = DkimAlgorithmError;

    fn try_from(algo: &'hdr str) -> Result<Self, Self::Error> {
        let ret = match algo {
            "rsa-sha1" => Self::Rsa_Sha1,
            "rsa-sha256" => Self::Rsa_Sha256,
            "ed25519-sha256" => Self::Ed25519_Sha256,
            _ => Self::Unknown(algo),
        };
        Ok(ret)
    }
}