use serde::{Deserialize, Serialize};
use std::fmt;
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct Seed {
pub value: u64,
}
impl fmt::Display for Seed {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.value.to_string())
}
}
impl From<&str> for Seed {
fn from(s: &str) -> Self {
if let Ok(seed) = s.parse::<u64>() {
Seed { value: seed }
} else {
use std::hash::{Hash, Hasher};
let mut hasher = std::collections::hash_map::DefaultHasher::new();
s.hash(&mut hasher);
Seed {
value: hasher.finish(),
}
}
}
}
impl Into<u64> for Seed {
fn into(self) -> u64 {
self.value
}
}
impl Default for Seed {
fn default() -> Self {
Seed {
value: rand::random(),
}
}
}