config_rw 2.1.0

配置文件读取与写入
Documentation
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();
    }
}