2 个版本

0.1.1 2024年7月10日
0.1.0 2024年7月7日

#203 in 配置

每月 49 次下载

MIT 许可证

14KB
184

Reloadify 🔁

Reloadify 是一个 Rust 库,旨在简化应用程序中配置文件的自动重新加载。它简化了检测配置文件(如 JSON、TOML、XML 等)更改的过程,并自动应用这些更改,而无需重启应用程序。

特性 ✨

  • 自动重新加载:检测配置文件更改并自动重新加载它们。
  • 支持多种格式:与 JSON、TOML、XML 等格式兼容。
  • 易于集成:专为无缝集成到 Rust 应用程序而设计。
  • 可定制:允许定制文件监视策略和重新加载行为。
  • 实时更改:返回一个配置接收通道。当配置更改时,调用者将接收最新的配置。

安装 🚀

要在 Rust 项目中使用 Reloadify,只需将其添加到您的 Cargo.toml

[dependencies]
reloadify = "0.1"

如果您想使用最新版本,可以像这样导入:

[dependencies]
reloadify = { git = "ssh://[email protected]/trayvonpan/reloadify.git", branch = "main" }

使用 🛠️

以下是一个基本示例,演示如何使用 Reloadify 自动重新加载 JSON 配置文件:

use reloadify::{ConfigId, Format, ReloadableConfig, Reloadify};
use serde::{Deserialize, Serialize};
use std::{path::PathBuf, str::FromStr, time::Duration};

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct TsConfig {
    pub extends: String,
    #[serde(rename = "compilerOptions")]
    pub compiler_options: CompilerOptions,
    pub files: Vec<String>,
    pub include: Vec<String>,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CompilerOptions {
    #[serde(rename = "outDir")]
    pub out_dir: String,
    pub types: Vec<String>,
}

const TS_CONFIG_ID: &str = "tsconfig";

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let reloadify = Reloadify::new();

    let rx = reloadify.add::<TsConfig>(ReloadableConfig {
        id: ConfigId::new(TS_CONFIG_ID),
        path: PathBuf::from_str("examples/config/tsconfig.spec.json")?,
        format: Format::Json,
        poll_interval: Duration::from_secs(1),
    })?;

    // Optional: Spawn a thread to listen for the latest configuration.
    std::thread::spawn(move || {
        for latest_cfg in rx {
            // Do something with the latest configuration...
            println!("Received latest config: {:?}", latest_cfg);
        }
    });

    let ts_config = reloadify.get::<TsConfig>(ConfigId::new(TS_CONFIG_ID))?;

    // Do something with ts_config...
    println!("{:?}", ts_config);

    Ok(())
}

文档 📚

有关详细使用说明和 API 参考,请参阅 文档

贡献 🤝

欢迎贡献!请分支仓库并提交带有您更改的拉取请求。

许可证 📝

本项目采用 MIT 许可证 - 有关详细信息,请参阅 LICENSE 文件。

依赖关系

~1.2–10MB
~92K SLoC