use std::collections::hash_map::DefaultHasher;
use std::hash::{Hash, Hasher};
use std::time::{SystemTime, UNIX_EPOCH};
use serde::{Deserialize, Serialize};
use crate::base62::ToBase62;
#[derive(Debug, Deserialize, Serialize)]
pub struct Key(String);
impl Key {
pub fn gen() -> Self {
Self(
SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap() .as_secs()
.to_base62(),
)
}
}
impl<T: Hash> From<T> for Key {
fn from(value: T) -> Self {
let mut hasher = DefaultHasher::new();
value.hash(&mut hasher);
let hash: u64 = hasher.finish();
Self(hash.to_base62())
}
}
impl AsRef<[u8]> for Key {
fn as_ref(&self) -> &[u8] {
self.0.as_bytes()
}
}