use config_rw::{init_config, get_arg, set_arg, save_config};
use config_rw::{get_string, get_i64, get_f64, get_bool};
use config_rw::{set_string, set_i64, set_f64, set_bool};
pub mod demo;
use serde_json::Value;
fn main() -> Result<(), Box<dyn std::error::Error>> {
test_config_rw()?;
demo_cross_module_config()?;
demo_complex_config()?;
Ok(())
}
fn test_config_rw() -> Result<(), Box<dyn std::error::Error>> {
init_config("config.toml")?;
println!("=== 配置管理器使用示例 ===\n");
println!("1. 读取配置示例:");
let host: Value = get_arg("database.host");
println!(" 数据库主机: {}", host);
let port = get_i64("database.port").unwrap_or(3306);
println!(" 数据库端口: {}", port);
let timeout = get_f64("database.timeout").unwrap_or(10.0);
println!(" 数据库超时: {} 秒", timeout);
let debug_enabled = get_bool("app.debug").unwrap_or(false);
println!(" 调试模式: {}", debug_enabled);
let app_name = get_string("app.name").unwrap_or("unknown".to_string());
println!(" 应用名称: {}", app_name);
let cache_enabled = get_bool("app.features.cache_enabled").unwrap_or(false);
println!(" 缓存启用: {}", cache_enabled);
let max_position = get_i64("trading.max_position_size").unwrap_or(0);
println!(" 最大仓位: {}", max_position);
println!("\n2. 修改配置示例:");
set_string("database.host", "127.0.0.1".to_string())?;
set_i64("database.port", 3306)?;
set_bool("app.debug", true)?;
set_f64("trading.stop_loss_percent", 0.03)?;
println!(" 已修改数据库主机为: 127.0.0.1");
println!(" 已修改数据库端口为: 3306");
println!(" 已启用调试模式");
println!(" 已修改止损百分比为: 3%");
set_string("new_section.new_key", "new_value".to_string())?;
set_i64("performance.max_threads", 8)?;
println!(" 已添加新配置: new_section.new_key = new_value");
println!(" 已添加性能配置: performance.max_threads = 8");
println!("\n3. 验证修改:");
let new_host = get_string("database.host").unwrap();
println!(" 新的数据库主机: {}", new_host);
let new_port = get_i64("database.port").unwrap();
println!(" 新的数据库端口: {}", new_port);
let debug_mode = get_bool("app.debug").unwrap();
println!(" 调试模式: {}", debug_mode);
let new_config = get_string("new_section.new_key").unwrap();
println!(" 新添加的配置: {}", new_config);
println!("\n4. 保存配置:");
save_config()?;
println!(" 配置已保存到文件,注释和格式得到保留");
println!("\n=== 示例完成 ===");
Ok(())
}
pub fn demo_cross_module_config() -> Result<(), Box<dyn std::error::Error>> {
println!("\n=== 跨模块配置访问示例 ===");
let server_port = get_i64("network.server_port").unwrap_or(8080);
println!("服务器端口: {}", server_port);
let log_level = get_string("logging.level").unwrap_or("info".to_string());
println!("日志级别: {}", log_level);
set_i64("network.server_port", 9090)?;
set_string("logging.level", "debug".to_string())?;
println!("已修改服务器端口为: 9090");
println!("已修改日志级别为: debug");
let new_port = get_i64("network.server_port").unwrap();
let new_level = get_string("logging.level").unwrap();
println!("新的服务器端口: {}", new_port);
println!("新的日志级别: {}", new_level);
Ok(())
}
pub fn demo_complex_config() -> Result<(), Box<dyn std::error::Error>> {
println!("\n=== 复杂配置示例 ===");
let array_value = Value::Array(vec![
Value::String("item1".to_string()),
Value::String("item2".to_string()),
Value::Number(serde_json::Number::from(42)),
]);
set_arg("complex.array", array_value)?;
let mut obj = serde_json::Map::new();
obj.insert("key1".to_string(), Value::String("value1".to_string()));
obj.insert("key2".to_string(), Value::Number(serde_json::Number::from(123)));
obj.insert("key3".to_string(), Value::Bool(true));
set_arg("complex.object", Value::Object(obj))?;
let array_config = get_arg("complex.array");
println!("数组配置: {}", array_config);
let object_config = get_arg("complex.object");
println!("对象配置: {}", object_config);
save_config()?;
println!("复杂配置已保存");
Ok(())
}