use derive_more::{Display, From, FromStr, Into};
use crate::utils::ExampleData;
#[derive(Display, From, FromStr, Into, Debug, Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct TicketToken(String);
impl TicketToken {
#[cfg(feature = "rand")]
pub fn generate_for_room(room: crate::rooms::RoomId) -> Self {
use rand::RngExt as _;
Self(
room.to_string()
.chars()
.chain(Some('#'))
.chain(
rand::rng()
.sample_iter(rand::distr::Alphanumeric)
.take(27) .map(char::from),
)
.collect(),
)
}
pub fn as_str(&self) -> &str {
&self.0
}
}
impl ExampleData for TicketToken {
fn example_data() -> Self {
Self("abcdefghijklmnopqrstuvwxyz123456abcdefghijklmnopqrstuvwxyz123456".to_string())
}
}