use std::str::FromStr;
use backend::decode_rust;
use config::{Variant, Version};
use Error;
impl FromStr for HashRaw {
type Err = Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
Ok(decode_rust(s)?)
}
}
#[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
pub struct HashRaw {
pub(crate) iterations: u32,
pub(crate) lanes: u32,
pub(crate) memory_size: u32,
pub(crate) raw_hash_bytes: Vec<u8>,
pub(crate) raw_salt_bytes: Vec<u8>,
pub(crate) variant: Variant,
pub(crate) version: Version,
}
impl HashRaw {
pub fn to_string(&self) -> String {
self.encode_rust()
}
pub fn iterations(&self) -> u32 {
self.iterations
}
pub fn lanes(&self) -> u32 {
self.lanes
}
pub fn memory_size(&self) -> u32 {
self.memory_size
}
pub fn raw_hash_bytes(&self) -> &[u8] {
&self.raw_hash_bytes
}
pub fn raw_salt_bytes(&self) -> &[u8] {
&self.raw_salt_bytes
}
pub fn variant(&self) -> Variant {
self.variant
}
pub fn version(&self) -> Version {
self.version
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_send() {
fn assert_send<T: Send>() {}
assert_send::<HashRaw>();
}
#[test]
fn test_sync() {
fn assert_sync<T: Sync>() {}
assert_sync::<HashRaw>();
}
#[cfg(feature = "serde")]
#[test]
fn test_serialize() {
use serde;
fn assert_serialize<T: serde::Serialize>() {}
assert_serialize::<HashRaw>();
}
#[cfg(feature = "serde")]
#[test]
fn test_deserialize() {
use serde;
fn assert_deserialize<'de, T: serde::Deserialize<'de>>() {}
assert_deserialize::<HashRaw>();
}
}