use base64::engine::general_purpose::URL_SAFE_NO_PAD;
use base64::Engine;
use rand::{CryptoRng, Error, Fill, RngCore};
pub trait TokenRng: CryptoRng {
fn generate_token(&mut self) -> Result<String, Error>;
}
impl<Rng: CryptoRng + RngCore> TokenRng for Rng {
fn generate_token(&mut self) -> Result<String, Error> {
let mut buf = [0; 32];
buf.try_fill(self)?;
Ok(URL_SAFE_NO_PAD.encode(buf))
}
}