use rand::distributions::{Alphanumeric, DistString};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RendezvousCode {
code: String,
}
impl Default for RendezvousCode {
fn default() -> Self {
Self::new()
}
}
impl RendezvousCode {
pub fn new() -> Self {
let mut rng = rand::thread_rng();
let code = Alphanumeric.sample_string(&mut rng, 9);
let code = code.to_ascii_uppercase();
#[allow(clippy::string_slice)]
let code = format!("{}-{}-{}", &code[..3], &code[3..6], &code[6..]);
RendezvousCode { code }
}
pub fn from_string(code: String) -> Self {
RendezvousCode { code }
}
pub fn as_str(&self) -> &str {
&self.code
}
}
impl std::fmt::Display for RendezvousCode {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.code)
}
}