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 在 解析器实现
9,970,214 每月下载量
在 16,559 个 crate (4,698 直接) 中使用
270KB
6K SLoC
toml
对于格式保留的编辑或更精细的输出控制,请参阅 toml_edit
许可证
本项目受以下任一许可证的许可:
- Apache 许可证 2.0 版,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任您选择。
贡献
除非您明确表示,否则您提交给 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