use rat_quickmem::{encode, decode, QuickMemConfig};
use std::collections::HashMap;
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== rat_quickmem Rust 基础示例 ===");
basic_types_example()?;
complex_data_example()?;
custom_config_example()?;
println!("\n所有示例执行完成!");
Ok(())
}
fn basic_types_example() -> Result<(), Box<dyn std::error::Error>> {
println!("\n--- 基础数据类型示例 ---");
let original_str = "Hello, rat_quickmem!";
let encoded = encode(original_str)?;
let decoded: String = decode(&encoded)?;
println!("字符串: {} -> {} bytes -> {}", original_str, encoded.len(), decoded);
let original_num = 42i32;
let encoded = encode(&original_num)?;
let decoded: i32 = decode(&encoded)?;
println!("数字: {} -> {} bytes -> {}", original_num, encoded.len(), decoded);
let original_vec = vec![1, 2, 3, 4, 5];
let encoded = encode(&original_vec)?;
let decoded: Vec<i32> = decode(&encoded)?;
println!("向量: {:?} -> {} bytes -> {:?}", original_vec, encoded.len(), decoded);
Ok(())
}
fn complex_data_example() -> Result<(), Box<dyn std::error::Error>> {
println!("\n--- 复杂数据结构示例 ---");
let mut map = HashMap::new();
map.insert("name".to_string(), "Alice".to_string());
map.insert("age".to_string(), "30".to_string());
map.insert("city".to_string(), "Beijing".to_string());
let encoded = encode(&map)?;
let decoded: HashMap<String, String> = decode(&encoded)?;
println!("HashMap: {:?} -> {} bytes", map, encoded.len());
println!("解码结果: {:?}", decoded);
let nested_data = vec![
vec!["row1_col1", "row1_col2"],
vec!["row2_col1", "row2_col2"],
vec!["row3_col1", "row3_col2"],
];
let encoded = encode(&nested_data)?;
let decoded: Vec<Vec<&str>> = decode(&encoded)?;
println!("嵌套向量: {:?} -> {} bytes", nested_data, encoded.len());
println!("解码结果: {:?}", decoded);
Ok(())
}
fn custom_config_example() -> Result<(), Box<dyn std::error::Error>> {
println!("\n--- 自定义配置示例 ---");
let config = QuickMemConfig {
max_data_size: 1024 * 1024, max_batch_count: 100,
enable_compression: true,
};
println!("自定义配置: {:?}", config);
let large_data: Vec<u8> = (0..10000).map(|i| (i % 256) as u8).collect();
let encoded = encode(&large_data)?;
let decoded: Vec<u8> = decode(&encoded)?;
println!("大数据测试: {} bytes -> {} bytes (压缩率: {:.2}%)",
large_data.len(),
encoded.len(),
(1.0 - encoded.len() as f64 / large_data.len() as f64) * 100.0);
assert_eq!(large_data, decoded);
println!("数据完整性验证: ✓");
Ok(())
}