2个版本
0.1.1 | 2024年3月4日 |
---|---|
0.1.0 | 2024年3月4日 |
#899 in 编码
每月 23次下载
用于 2 crates
250KB
6K SLoC
toml-rs
toml
crate的开发已转移到 https://github.com/toml-rs/toml/tree/master/crates/toml。
此存储库现已归档。
lib.rs
:
一个TOML解析库
此库实现了一个与TOML v0.5.0兼容的解析器,主要支持serde
库,用于在Rust中编码/解码各种类型。
TOML本身是一种简单、易用且易于阅读的配置格式
[package]
name = "toml"
version = "0.4.2"
authors = ["Alex Crichton <[email protected]>"]
[dependencies]
serde = "1.0"
TOML格式在Rust社区中相对常见,尤其是在配置方面,值得注意的是它被Rust的包管理器Cargo使用。
TOML值
此crate中的TOML值用Value
枚举表示
pub enum Value {
String(String),
Integer(i64),
Float(f64),
Boolean(bool),
Datetime(Datetime),
Array(Array),
Table(Table),
}
TOML类似于JSON,但增加了Datetime
类型。总的来说,TOML和JSON在格式上可以互换。
解析TOML
解析TOML文档最简单的方法是通过Value
类型
use toml::Value;
let value = "foo = 'bar'".parse::<Value>().unwrap();
assert_eq!(value["foo"].as_str(), Some("bar"));
Value
类型实现了一系列方便的方法和特质;上面的示例使用了FromStr
将[str]解析为Value
。
反序列化和序列化
此crate支持serde
1.0,并实现了一系列的Deserialize
、Serialize
、Deserializer
和Serializer
特质。具体来说,你会找到以下内容:
反序列化对于值
序列化对于值
反序列化对于日期时间
序列化对于日期时间
反序列化器对于 de::反序列化器
序列化器对于 ser::序列化器
反序列化器对于值
这意味着您可以使用 Serde 来反序列化/序列化这个crate中的 Value
类型以及 Datetime
类型。您还可以使用 Deserializer
、Serializer
或 Value
类型本身作为任意类型的反序列化器/序列化器。
使用 TOML 反序列化的示例
use serde_derive::Deserialize;
#[derive(Deserialize)]
struct Config {
ip: String,
port: Option<u16>,
keys: Keys,
}
#[derive(Deserialize)]
struct Keys {
github: String,
travis: Option<String>,
}
fn main() {
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");
}
您可以用类似的方式序列化类型
use serde_derive::Serialize;
#[derive(Serialize)]
struct Config {
ip: String,
port: Option<u16>,
keys: Keys,
}
#[derive(Serialize)]
struct Keys {
github: String,
travis: Option<String>,
}
fn main() {
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();
}
依赖项
~110–530KB
~11K SLoC