Rust通用代码库codes-common的使用,提供高效开发工具与实用功能集
Rust通用代码库codes-common的使用,提供高效开发工具与实用功能集
Package codes-common
为codes-*
包提供支持能力。
关于API设计的说明,请参考仓库README。
特性
build
- 用于构建脚本的工具csv_tools
- 用于读取和处理CSV文件的工具,需要build
特性
变更记录
版本0.1.9
- 将构建相关工具移到
build
模块,通过特性控制
版本0.1.8
- 将校验数字移到独立包
- 添加
FixedLengthCode
和VariableLengthCode
特性
版本0.1.7
- 添加
check_digits
模块,包含LuhnAlgorithm
的实现
版本0.1.6
- 修复插入字段宏中的错误
版本0.1.5
- 更新CSV处理程序
- 添加CSV宏
版本0.1.4
- 添加
csv_tools
特性
版本0.1.3
- 重构
code_impl
宏以支持非字符串代码
版本0.1.2
- 为
SimpleData
添加retain
方法
版本0.1.1
- 重构构建过程,添加
SimpleData
类型和Data
特性
版本0.1.0
- 初始版本,可能会有较大变化
示例代码
use codes_common::build::generate_file;
use codes_common::csv_tools::{read_csv, CsvOptions};
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 使用build特性生成文件
generate_file(
"src/generated.rs",
"// 自动生成的代码\npub const VERSION: &str = \"0.1.9\";",
)?;
// 使用csv_tools特性读取CSV文件
let csv_data = r#"id,name,value
1,Alice,100
2,Bob,200
3,Charlie,300"#;
let options = CsvOptions {
has_headers: true,
delimiter: b',',
flexible: false,
};
let records = read_csv(csv_data.as_bytes(), options)?;
for record in records {
println!("{:?}", record);
}
Ok(())
}
完整示例demo
// 引入所需模块
use codes_common::build::generate_file;
use codes_common::csv_tools::{read_csv, CsvOptions, write_csv};
use std::error::Error;
fn main() -> Result<(), Box<dyn Error>> {
// 示例1:使用build特性生成Rust源代码文件
generate_file(
"src/version.rs",
r#"// 自动生成的版本文件
pub const VERSION: &str = "1.0.0";
pub const BUILD_DATE: &str = "2023-11-15";
"#,
)?;
// 示例2:读取并处理CSV数据
let input_data = r#"id,name,age,score
1,张三,25,88
2,李四,30,92
3,王五,28,85"#;
let read_options = CsvOptions {
has_headers: true,
delimiter: b',',
flexible: false,
};
println!("读取CSV数据:");
let records = read_csv(input_data.as_bytes(), read_options)?;
for record in records {
println!("记录: {:?}", record);
}
// 示例3:修改数据并写入新CSV
let mut data = vec![
vec!["id".to_string(), "product".to_string(), "price".to_string()],
vec!["1".to_string(), "苹果".to_string(), "8.5".to_string()],
vec!["2".to_string(), "香蕉".to_string(), "5.2".to_string()],
];
// 添加新记录
data.push(vec!["3".to_string(), "橙子".to_string(), "6.8".to_string()]);
// 写入CSV文件
let output_file = "products.csv";
write_csv(output_file, &data)?;
println!("已写入CSV文件: {}", output_file);
Ok(())
}
安装说明
在项目目录中运行以下Cargo命令:
cargo add codes-common
或者在Cargo.toml中添加以下行:
codes-common = "0.1.9"
特性启用
要使用特定功能,需要在Cargo.toml中启用相应特性:
[dependencies.codes-common]
version = "0.1.9"
features = ["build", "csv_tools"]
1 回复
Rust通用代码库codes-common使用指南
概述
codes-common是一个Rust通用代码库,提供了一系列高效开发工具和实用功能集,旨在提高Rust开发者的生产力。它包含了常用的数据结构、算法、工具函数和开发辅助功能。
主要功能
- 常用数据结构扩展
- 高效算法实现
- 开发工具辅助
- 实用宏定义
- 性能优化工具
安装方法
在Cargo.toml中添加依赖:
[dependencies]
codes-common = "0.1" # 使用最新版本号
使用示例
1. 集合操作扩展
use codes_common::collections::ExtendedCollection;
fn main() {
let vec = vec![1, 2, 3, 4, 5];
// 分块处理
for chunk in vec.chunks_with_step(2, 1) {
println!("Chunk: {:?}", chunk);
}
// 安全获取
println!("Safe get: {:?}", vec.get_or_default(10, &0));
}
2. 字符串处理工具
use codes_common::string_utils;
fn main() {
let s = "hello world";
// 字符串转换为驼峰命名
println!("Camel case: {}", string_utils::to_camel_case(s));
// 生成随机字符串
println!("Random string: {}", string_utils::random_string(10));
}
3. 性能测量工具
use codes_common::perf;
fn main() {
// 测量代码执行时间
let result = perf::measure_time(|| {
// 需要测量的代码
let mut sum = 0;
for i in 0..1000000 {
sum += i;
}
sum
});
println!("Sum: {}, took {} ms", result.value, result.time_ms);
}
4. 错误处理增强
use codes_common::error::{CommonError, ResultExt};
fn risky_operation() -> Result<(), CommonError> {
// ... 可能失败的操作
Err(CommonError::new("Something went wrong"))
}
fn main() {
// 增强的错误处理
let result = risky_operation()
.context("Additional context info")?
.wrap_error("Wrapped error");
if let Err(e) = result {
eprintln!("Error occurred: {}", e.full_message());
}
}
高级功能
并发模式
use codes_common::concurrency::parallel_map;
fn main() {
let data = vec![1, 2, 3, 4, 5];
// 并行处理
let results = parallel_map(data, |x| x * 2, 4); // 使用4个线程
println!("Results: {:?}", results);
}
缓存工具
use codes_common::caching::{Cache, LruCache};
fn main() {
let mut cache = LruCache::new(100); // 容量100
cache.insert("key1", "value1");
if let Some(value) = cache.get(&"key1") {
println!("Got value: {}", value);
}
}
最佳实践
- 在大型项目中,按需导入特定模块而不是整个库
- 充分利用提供的性能分析工具优化热点代码
- 使用增强的错误处理来改善错误报告
- 对集合操作优先使用库提供的并行版本
版本更新
建议定期检查更新,库会持续添加新功能和优化性能。可以通过cargo update codes-common
获取最新版本。
这个库特别适合需要快速开发原型或构建生产级应用的Rust开发者,它提供的工具集可以显著减少样板代码的编写。
完整示例demo
下面是一个综合使用codes-common库功能的完整示例:
use codes_common::{
collections::ExtendedCollection,
string_utils,
perf,
error::{CommonError, ResultExt},
concurrency::parallel_map,
caching::{Cache, LruCache}
};
fn main() {
// 1. 集合操作示例
let numbers = vec![1, 2, 3, 4, 5, 6, 7, 8, 9];
println!("原始集合: {:?}", numbers);
// 分块处理
println!("分块处理结果:");
for (i, chunk) in numbers.chunks_with_step(3, 1).enumerate() {
println!("块 {}: {:?}", i, chunk);
}
// 2. 字符串处理示例
let text = "hello_codes_common";
println!("\n原始字符串: {}", text);
println!("驼峰命名: {}", string_utils::to_camel_case(text));
println!("随机字符串: {}", string_utils::random_string(8));
// 3. 性能测量示例
println!("\n性能测量:");
let result = perf::measure_time(|| {
let processed = parallel_map(&numbers, |x| x * x, 2); // 使用2个线程
processed.into_iter().sum::<i32>()
});
println!("计算结果: {}, 耗时: {}ms", result.value, result.time_ms);
// 4. 错误处理示例
println!("\n错误处理演示:");
match risky_operation() {
Ok(_) => println!("操作成功"),
Err(e) => println!("操作失败: {}", e.full_message())
}
// 5. 缓存使用示例
println!("\n缓存演示:");
let mut cache = LruCache::new(3);
cache.insert("one", 1);
cache.insert("two", 2);
cache.insert("three", 3);
println!("缓存大小: {}", cache.len());
if let Some(val) = cache.get(&"two") {
println!("获取缓存值: {}", val);
}
}
fn risky_operation() -> Result<(), CommonError> {
// 模拟可能失败的操作
if rand::random() {
Ok(())
} else {
Err(CommonError::new("随机操作失败"))
.context("在risky_operation中发生错误")?
.wrap_error("包装后的错误")
}
}
这个完整示例展示了如何综合使用codes-common库的多个功能模块,包括:
- 集合扩展操作(分块处理)
- 字符串处理工具
- 性能测量
- 增强的错误处理
- 并发处理
- 缓存使用
您可以根据实际需求选择使用其中的特定模块功能。