use config_rw::ConfigState;
use std::sync::LazyLock;
use std::time::Duration;
static CONFIG: LazyLock<ConfigState> =
LazyLock::new(|| ConfigState::init_config("example_config.toml"));
fn print_config() {
println!(
" 应用名称: {}",
CONFIG.get_string("app.name").unwrap_or_default()
);
println!(
" 版本: {}",
CONFIG.get_string("app.version").unwrap_or_default()
);
println!(
" 调试模式: {}",
CONFIG.get_bool("app.debug").unwrap_or(false)
);
println!(" 数组 arr: {:?}", CONFIG.get_value("arr"));
println!(" 当前缓冲区索引: {}", CONFIG.get_current_buffer_index());
}
fn main() {
println!("配置热更新和自动回调示例");
println!("========================");
CONFIG.add_change_callback(|state| {
println!("\n🔄 检测到外部文件修改! 配置已自动更新!");
let app_name = state.get_string("app.name").unwrap_or_default();
let version = state.get_string("app.version").unwrap_or_default();
println!(" 应用名称: {}", app_name);
println!(" 版本: {}", version);
});
CONFIG
.set_string("app.name", "热更新示例".to_string())
.unwrap();
CONFIG
.set_string("app.version", "1.0.0".to_string())
.unwrap();
CONFIG.set_bool("app.debug", false).unwrap();
CONFIG
.set_value("arr", serde_json::json!([1, 2, 3]))
.unwrap();
println!("📝 初始配置:");
print_config();
println!("\n📝 通过程序修改配置(不触发回调):");
CONFIG
.set_string("app.name", "更新后的应用".to_string())
.unwrap();
CONFIG
.set_string("app.version", "2.0.0".to_string())
.unwrap();
CONFIG.set_bool("app.debug", true).unwrap();
print_config();
println!("\n💡 现在您可以:");
println!("1. 手动编辑 example_config.toml 文件");
println!("2. 保存文件后,回调会自动触发!");
println!("3. 按 Ctrl+C 退出程序");
loop {
std::thread::sleep(Duration::from_secs(1));
print!(".");
std::io::Write::flush(&mut std::io::stdout()).unwrap();
}
}