use std::str::FromStr;
use config::defaults::DEFAULT_VARIANT;
use {Error, ErrorKind};
impl Default for Variant {
fn default() -> Variant {
DEFAULT_VARIANT
}
}
impl FromStr for Variant {
type Err = Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"argon2d" => Ok(Variant::Argon2d),
"argon2i" => Ok(Variant::Argon2i),
"argon2id" => Ok(Variant::Argon2id),
_ => {
Err(Error::new(ErrorKind::VariantEncodeError).add_context(format!("String: {}", s)))
}
}
}
}
#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
pub enum Variant {
Argon2d = 0,
Argon2i = 1,
Argon2id = 2,
}
impl Variant {
pub fn as_str(&self) -> &'static str {
match *self {
Variant::Argon2d => "argon2d",
Variant::Argon2i => "argon2i",
Variant::Argon2id => "argon2id",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_send() {
fn assert_send<T: Send>() {}
assert_send::<Variant>();
}
#[test]
fn test_sync() {
fn assert_sync<T: Sync>() {}
assert_sync::<Variant>();
}
#[cfg(feature = "serde")]
#[test]
fn test_serialize() {
use serde;
fn assert_serialize<T: serde::Serialize>() {}
assert_serialize::<Variant>();
}
#[cfg(feature = "serde")]
#[test]
fn test_deserialize() {
use serde;
fn assert_deserialize<'de, T: serde::Deserialize<'de>>() {}
assert_deserialize::<Variant>();
}
}