From 8e5392cc94c97f968aa0df7d948ed36d4db0db95 Mon Sep 17 00:00:00 2001 From: matresnan <1358168412@qq.com> Date: Tue, 19 Aug 2025 10:37:32 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E5=AD=97=E7=AC=A6=E9=9B=86=E4=B8=8E=E5=AD=97=E7=AC=A6=E4=B8=B2?= =?UTF-8?q?=E6=9E=84=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 引入默认字符集常量并优化字符串构建及生成功能以提升效率 --- src/generate.rs | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/src/generate.rs b/src/generate.rs index 329ba23..4a77fb5 100644 --- a/src/generate.rs +++ b/src/generate.rs @@ -1,5 +1,8 @@ use rand::Rng; +const DEFAULT_CHARSET: &[u8] = + b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + /// 随机Token生成器结构体 pub struct TokenGenerator { uppercase: bool, @@ -38,48 +41,47 @@ impl TokenGenerator { /// 生成随机token pub fn generate(&self, length: usize) -> String { let charset = self.build_charset(); + let mut result = String::with_capacity(length); + if charset.is_empty() { // 如果没有选择任何字符类型,使用默认字符集 return self.generate_with_default_charset(length); } let mut rng = rand::rng(); - (0..length) - .map(|_| { - let idx = rng.random_range(0..charset.len()); - charset[idx] as char - }) - .collect() + for _ in 0..length { + let idx = rng.random_range(0..charset.len()); + result.push(charset[idx] as char); + } + result } /// 构建字符集 fn build_charset(&self) -> Vec { - let mut charset = Vec::new(); + let mut charset_string = String::new(); if self.uppercase { - charset.extend_from_slice(b"ABCDEFGHIJKLMNOPQRSTUVWXYZ"); + charset_string.push_str("ABCDEFGHIJKLMNOPQRSTUVWXYZ"); } if self.lowercase { - charset.extend_from_slice(b"abcdefghijklmnopqrstuvwxyz"); + charset_string.push_str("abcdefghijklmnopqrstuvwxyz"); } if self.numbers { - charset.extend_from_slice(b"0123456789"); + charset_string.push_str("0123456789"); } - charset + charset_string.into_bytes() } /// 使用默认字符集生成token fn generate_with_default_charset(&self, length: usize) -> String { - let charset = - b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; let mut rng = rand::rng(); + let mut result = String::with_capacity(length); - (0..length) - .map(|_| { - let idx = rng.random_range(0..charset.len()); - charset[idx] as char - }) - .collect() + for _ in 0..length { + let idx = rng.random_range(0..DEFAULT_CHARSET.len()); + result.push(DEFAULT_CHARSET[idx] as char); + } + result } }