#toml-config #toml-parser #codec #encoding #format-preserving #decoder #encoder

toml

为 TOML 格式的文件和流提供原生 Rust 编码和解码器。为 TOML 数据提供标准 Serialize/Deserialize 特性的实现,以方便 Rust 结构的序列化和反序列化。

85 个版本

0.8.19 2024 年 7 月 31 日
0.8.14 2024 年 6 月 3 日
0.8.12 2024 年 3 月 18 日
0.8.8 2023 年 11 月 6 日
0.1.3 2014 年 11 月 22 日

#6解析器实现

Download history 1936344/week @ 2024-05-03 2016476/week @ 2024-05-10 2101081/week @ 2024-05-17 2031399/week @ 2024-05-24 2226189/week @ 2024-05-31 2153537/week @ 2024-06-07 2099630/week @ 2024-06-14 2107166/week @ 2024-06-21 1998278/week @ 2024-06-28 2081773/week @ 2024-07-05 2236914/week @ 2024-07-12 2325433/week @ 2024-07-19 2352536/week @ 2024-07-26 2289674/week @ 2024-08-02 2448327/week @ 2024-08-09 2434647/week @ 2024-08-16

9,970,214 每月下载量
16,559 个 crate (4,698 直接) 中使用

MIT/Apache

270KB
6K SLoC

toml

Latest Version Documentation

Rust 的 serde 兼容 TOML 解码器和编码器。

对于格式保留的编辑或更精细的输出控制,请参阅 toml_edit

许可证

本项目受以下任一许可证的许可:

任您选择。

贡献

除非您明确表示,否则您提交给 toml-rs 的任何有意提交以包含在内的贡献,根据 Apache-2.0 许可证的定义,应按上述方式双重许可,不附加任何额外条款或条件。


lib.rs:

一个 [serde] 兼容的 [TOML] 解析库

TOML 本身是一种简单、易用且可读的配置格式

[package]
name = "toml"

[dependencies]
serde = "1.0"

在 Rust 社区中,TOML 格式相对常见,尤其是被 [Cargo](Rust 的包管理器)所使用。

TOML 值

使用 Table 类型表示 TOML 文档,该类型将 String 映射到 Value 枚举

pub enum Value {
    String(String),
    Integer(i64),
    Float(f64),
    Boolean(bool),
    Datetime(Datetime),
    Array(Array),
    Table(Table),
}

解析 TOML

解析 TOML 文档的最简单方法是使用 Table 类型

使用 toml::Table;

let value = "foo = 'bar'".parse:

()).unwrap();

assert_eq!(value["foo"].as_str(), Some("bar"));


The [`Table`] type implements a number of convenience methods and
traits; the example above uses [`FromStr`] to parse a [`str`] into a
[`Table`].

## Deserialization and Serialization

This crate supports [`serde`] 1.0 with a number of
implementations of the `Deserialize`, `Serialize`, `Deserializer`, and
`Serializer` traits. Namely, you'll find:

* `Deserialize for Table`
* `Serialize for Table`
* `Deserialize for Value`
* `Serialize for Value`
* `Deserialize for Datetime`
* `Serialize for Datetime`
* `Deserializer for de::Deserializer`
* `Serializer for ser::Serializer`
* `Deserializer for Table`
* `Deserializer for Value`

This means that you can use Serde to deserialize/serialize the
[`Table`] type as well as [`Value`] and [`Datetime`] type in this crate. You can also
use the [`Deserializer`], [`Serializer`], or [`Table`] type itself to act as
a deserializer/serializer for arbitrary types.

An example of deserializing with TOML is:

use serde::Deserialize;

#[derive(Deserialize)]
struct Config {
    ip: String,
    port: Option<u16>,
    keys: Keys,
}

#[derive(Deserialize)]
struct Keys {
    github: String,
    travis: Option<String>,
}

let config: Config = toml::from_str(r#"
    ip = '127.0.0.1'

    [keys]
    github = 'xxxxxxxxxxxxxxxxx'
    travis = 'yyyyyyyyyyyyyyyyy'
"#).unwrap();

assert_eq!(config.ip, "127.0.0.1");
assert_eq!(config.port, None);
assert_eq!(config.keys.github, "xxxxxxxxxxxxxxxxx");
assert_eq!(config.keys.travis.as_ref().unwrap(), "yyyyyyyyyyyyyyyyy");

您可以以类似的方式序列化类型

使用 serde::Serialize;

#[derive(Serialize)] struct Config { ip: String, port: Option, keys: Keys, }

#[derive(Serialize)] struct Keys { github: String, travis: Option, }

let config = Config { ip: "127.0.0.1".to_string(), port: None, keys: Keys { github: "xxxxxxxxxxxxxxxxx".to_string(), travis: Some("yyyyyyyyyyyyyyyyy".to_string()), }, };

let toml = toml::to_string(&config).unwrap();


[TOML]: https://github.com/toml-lang/toml
[Cargo]: https://crates.io/
[`serde`]: https://serde.rs/
[serde]: https://serde.rs/

依赖关系

~110–630KB
~13K SLoC