use core::str::FromStr;
use derive_more::{Display, FromStrError};
#[derive(Clone, Copy, Debug, Default, Display, Eq, Hash, Ord, PartialEq, PartialOrd)]
#[non_exhaustive]
pub enum PublicKeyEncoding {
#[default]
Base16,
#[cfg(feature = "base58")]
Asimov,
#[cfg(feature = "base32z")]
Base32z,
#[cfg(feature = "base58")]
Base58,
#[cfg(feature = "base64")]
Base64,
#[cfg(feature = "base64")]
Base64Url,
#[cfg(feature = "multibase")]
Multibase,
#[cfg(feature = "base58")]
Near,
#[cfg(feature = "base64")]
OpenSsh,
}
impl FromStr for PublicKeyEncoding {
type Err = FromStrError;
fn from_str(input: &str) -> Result<Self, Self::Err> {
Ok(match input {
input if input.eq_ignore_ascii_case("base16") => Self::Base16,
#[cfg(feature = "base58")]
input if input.eq_ignore_ascii_case("asimov") => Self::Asimov,
#[cfg(feature = "base32z")]
input if input.eq_ignore_ascii_case("base32z") => Self::Base32z,
#[cfg(feature = "base58")]
input if input.eq_ignore_ascii_case("base58") => Self::Base58,
#[cfg(feature = "base64")]
input if input.eq_ignore_ascii_case("base64") => Self::Base64,
#[cfg(feature = "base64")]
input if input.eq_ignore_ascii_case("base64url") => Self::Base64Url,
#[cfg(feature = "multibase")]
input if input.eq_ignore_ascii_case("multibase") => Self::Multibase,
#[cfg(feature = "base58")]
input if input.eq_ignore_ascii_case("near") => Self::Near,
#[cfg(feature = "base64")]
input if input.eq_ignore_ascii_case("openssh") => Self::OpenSsh,
_ => return Err(FromStrError::new("PublicKeyEncoding")),
})
}
}
impl PublicKeyEncoding {
pub const VARIANTS: &'static [Self] = &[
Self::Base16,
#[cfg(feature = "base58")]
Self::Asimov,
#[cfg(feature = "base32z")]
Self::Base32z,
#[cfg(feature = "base58")]
Self::Base58,
#[cfg(feature = "base64")]
Self::Base64,
#[cfg(feature = "base64")]
Self::Base64Url,
#[cfg(feature = "multibase")]
Self::Multibase,
#[cfg(feature = "base58")]
Self::Near,
#[cfg(feature = "base64")]
Self::OpenSsh,
];
}