omry-common 0.18.0-alpha5

A searchable archive for web pages you don't want to lose.
Documentation
//! Provides functions to generate access tokens.
use rand::RngExt;
use rand::distr::Alphanumeric;
use rand::rngs::ChaCha20Rng;

// Inspired by
// https://github.com/EffortlessMetrics/uselesskey/blob/52375d7e2987de345006ce50e7831383ddbc0ab4/crates/uselesskey-core-token-shape/src/lib.rs#L70

// const BASE62_ALPHABET: &[u8; 62] =
//     b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

/// Generates a new token of
pub fn generate(len: usize) -> String {
    let rng = rand::make_rng::<ChaCha20Rng>();
    rng.sample_iter(Alphanumeric)
        .take(len)
        .map(char::from)
        .collect()
}

#[cfg(test)]
mod tests {
    use super::*;

    const TOKEN_LEN: usize = 20;

    #[test]
    fn can_generate_new_token() {
        let token = generate(TOKEN_LEN);
        dbg!(&token);
        insta::assert_ron_snapshot!(token, {"." => "[token]"});
    }
}