From 69ccd48c3b80940578f4a43b10b934a330aa305c Mon Sep 17 00:00:00 2001 From: spushk Date: Sat, 16 May 2026 10:30:53 +0500 Subject: [PATCH] fix(controller/generator)!: take iterator for chars to reduce memory overhead --- kuyaseg-controller/src/generator.rs | 28 ++++++++++++++++------------ kuyaseg-controller/src/lib.rs | 3 +-- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/kuyaseg-controller/src/generator.rs b/kuyaseg-controller/src/generator.rs index ad6a384..f56fb60 100644 --- a/kuyaseg-controller/src/generator.rs +++ b/kuyaseg-controller/src/generator.rs @@ -30,10 +30,14 @@ pub fn bytes(rng: &mut G, size: usize) -> Vec { buf } -pub fn str_bytes(rng: &mut G, length: usize, dictionary: &[char]) -> Result, GeneratorErr> { +pub fn str_bytes( + rng: &mut G, + length: usize, + dictionary: impl Iterator, +) -> Result, GeneratorErr> { let mut buf = String::with_capacity(length); - let dictionary = Zeroizing::new(dictionary.iter().unique().cloned().collect::>()); + let dictionary = Zeroizing::new(dictionary.unique().collect::>()); let distribution = rand::distr::slice::Choose::new(&dictionary).map_err(|_| GeneratorErr::EmptyDistribution)?; let dict_size = dictionary.len(); @@ -194,11 +198,11 @@ mod test { let mut rng = AwsRng::new(); let dict = dict_alnum(32); - let gen0 = str_bytes(&mut rng, 0, &dict).unwrap(); - let gen1 = str_bytes(&mut rng, 1, &dict).unwrap(); - let gen27 = str_bytes(&mut rng, 27, &dict).unwrap(); - let gen256 = str_bytes(&mut rng, 256, &dict).unwrap(); - assert_ne!(str_bytes(&mut rng, 256, &dict).unwrap(), gen256); + let gen0 = str_bytes(&mut rng, 0, dict.iter().cloned()).unwrap(); + let gen1 = str_bytes(&mut rng, 1, dict.iter().cloned()).unwrap(); + let gen27 = str_bytes(&mut rng, 27, dict.iter().cloned()).unwrap(); + let gen256 = str_bytes(&mut rng, 256, dict.iter().cloned()).unwrap(); + assert_ne!(str_bytes(&mut rng, 256, dict.iter().cloned()).unwrap(), gen256); // length assert_eq!(gen0.len(), 0); @@ -222,7 +226,7 @@ mod test { let mut rng = AwsRng::new(); let dict: Vec = dict_alnum(3); - let gen16 = str_bytes(&mut rng, 16, &dict).unwrap(); + let gen16 = str_bytes(&mut rng, 16, dict.iter().cloned()).unwrap(); assert_eq!(gen16.len(), 16); assert_dict_chars(&gen16, &dict); @@ -258,12 +262,12 @@ mod test { let dict = dict_alnum(32); assert_eq!( - str_bytes(&mut Hc128Rng::seed_from_u64(42), 256, &dict).unwrap(), - str_bytes(&mut Hc128Rng::seed_from_u64(42), 256, &dict).unwrap() + str_bytes(&mut Hc128Rng::seed_from_u64(42), 256, dict.iter().cloned()).unwrap(), + str_bytes(&mut Hc128Rng::seed_from_u64(42), 256, dict.iter().cloned()).unwrap() ); assert_ne!( - str_bytes(&mut Hc128Rng::seed_from_u64(42), 256, &dict).unwrap(), - str_bytes(&mut Hc128Rng::seed_from_u64(43), 256, &dict).unwrap() + str_bytes(&mut Hc128Rng::seed_from_u64(42), 256, dict.iter().cloned()).unwrap(), + str_bytes(&mut Hc128Rng::seed_from_u64(43), 256, dict.iter().cloned()).unwrap() ); } diff --git a/kuyaseg-controller/src/lib.rs b/kuyaseg-controller/src/lib.rs index fed3523..c185f23 100644 --- a/kuyaseg-controller/src/lib.rs +++ b/kuyaseg-controller/src/lib.rs @@ -1,5 +1,4 @@ -#![feature(sync_nonpoison, nonpoison_rwlock)] - pub mod generator; pub mod reporting; +pub mod resource; pub mod utils;