ForgeFlux/src/utils/random_string.rs
Aravinth Manivannan 36f1c1e0f4
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
feat: test with mocks
2024-05-06 19:42:40 +05:30

39 lines
987 B
Rust

use std::sync::Arc;
use actix_web::web;
use mockall::predicate::*;
use mockall::*;
#[automock]
pub trait GenerateRandomStringInterface: Send + Sync {
fn get_random(&self, len: usize) -> String;
}
pub struct GenerateRandomString;
impl GenerateRandomStringInterface for GenerateRandomString {
fn get_random(&self, len: usize) -> String {
use std::iter;
use rand::{distributions::Alphanumeric, rngs::ThreadRng, thread_rng, Rng};
let mut rng: ThreadRng = thread_rng();
iter::repeat(())
.map(|()| rng.sample(Alphanumeric))
.map(char::from)
.take(len)
.collect::<String>()
}
}
impl GenerateRandomString {
pub fn inject() -> impl FnOnce(&mut web::ServiceConfig) {
let g: Arc<dyn GenerateRandomStringInterface> = Arc::new(GenerateRandomString);
let f = move |cfg: &mut web::ServiceConfig| {
cfg.app_data(web::Data::new(g));
};
Box::new(f)
}
}