#toml-config #toml #toml-parser #static #embed #proc-macro

static-toml

轻松将TOML文件嵌入到Rust代码中作为静态数据,使用自定义数据结构

4个稳定版本

1.2.0 2023年11月25日
1.1.0 2023年11月19日
1.0.1 2023年7月9日
1.0.0 2023年7月8日

#255配置

Download history 238/week @ 2024-04-23 231/week @ 2024-04-30 279/week @ 2024-05-07 309/week @ 2024-05-14 229/week @ 2024-05-21 411/week @ 2024-05-28 238/week @ 2024-06-04 228/week @ 2024-06-11 214/week @ 2024-06-18 231/week @ 2024-06-25 237/week @ 2024-07-02 319/week @ 2024-07-09 152/week @ 2024-07-16 203/week @ 2024-07-23 282/week @ 2024-07-30 195/week @ 2024-08-06

867 每月下载量
用于 4 个Crates(3个直接使用)

MIT 许可证

59KB
1K SLoC

static-toml

轻松将TOML文件嵌入到Rust代码中作为静态数据,使用自定义数据结构。


Version License Docs CI

关于

通过过程宏将TOML文件嵌入到Rust二进制文件中。该库允许在编译时包含TOML文件,并生成可以直接由Rust代码访问的静态数据结构,无需运行时解析。

主要功能

  • 📝 无需努力嵌入TOML配置文件。
  • 🔨 生成可靠的Rust数据结构来表示TOML内容。
  • 🔧 使用前缀和后缀自定义生成的类型以实现灵活性。
  • 🚦 享受清晰的编译时错误信息,便于调试。

使用方法

首先,请确保将 static-toml 添加到您的 Cargo.toml 依赖项中:通过命令行

cargo add static-toml

或直接添加到您的 Cargo.toml

[dependencies]
static-toml = "1"

然后,使用 static_toml! 宏来包含您的TOML文件

# message.toml

[info]
welcome = "Welcome to our application!"
update = "Your data has been updated successfully."

[errors]
file_not_found = "The requested file could not be found."
permission_denied = "You do not have permission to perform this action."
static_toml::static_toml! {
    static MESSAGES = include_toml!("messages.toml");
}

const WELCOME_MESSAGE: &str = MESSAGES.info.welcome;

这将读取您的TOML文件并相应地生成Rust数据结构。现在您可以轻松访问TOML文件中的值。

除了使用 static 之外,static_toml! 宏还允许使用 const 来嵌入TOML数据。这在需要常量值的情况下特别有用,例如在const函数或const泛型中。要使用此功能,只需在需要时将宏调用中的 static 替换为 const

自定义选项

您可以配置宏如何生成数据类型

static_toml! {
    #[static_toml(
        prefix = Prefix, 
        suffix = Suffix, 
        root_mod = cfg, 
        values_ident = items, 
        prefer_slices = false
    )]
    static CONFIG = include_toml!("config.toml");
}
  • prefix:在生成的数据类型前添加前缀。建议使用 PascalCase 作为前缀。

  • suffix:类似于前缀,但它是后缀。

  • root_mod:设置包含TOML文件数据类型的根模块的标识符。

  • values_ident:当为数组生成数据类型时,这指定了模块和数据类型的不同名称(默认为 values)。

  • prefer_slices:确定宏是否应该为数组生成固定大小的切片。如果设置为false,则将生成元组(默认值为true)。

增强您的类型

您可以使用文档注释、派生属性和其他属性。此外,您还可以设置可见性。您的代码可以是整洁且描述性的。

static_toml! {
    /// The configuration.
    #[derive(Debug)]
    #[allow(missing_docs)]
    pub static CONFIG = include_toml!("config.toml");
}

错误处理

遇到编译错误?不用担心。static-toml提供有关TOML解析或文件访问问题的 informative 错误消息。

示例

假设您有一个简单的TOML文件,如下所示

# config.toml
[database]
url = "localhost"
port = 5432

使用static_toml!

static_toml! {
    static CONFIG = include_toml!("config.toml");
}

就这样,您就有了可以使用Rust数据结构。

assert_eq!(CONFIG.database.url, "localhost");
assert_eq!(CONFIG.database.port, 5432);

依赖项

~1.1–1.8MB
~35K SLoC