39 lines
987 B
Rust
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)
|
|
}
|
|
}
|