[![toml-badge]][toml] [![cat-encoding-badge]][cat-encoding]
把一些 toml 解析成,一个通用的toml::Value
类型,它能够表示任何有效的 TOML 数据。
extern crate toml;
use toml::{Value, de::Error};
fn main() -> Result<(), Error> {
let toml_content = r#"
[package]
name = "your_package"
version = "0.1.0"
authors = ["You! <[email protected]>"]
[dependencies]
serde = "1.0"
"#;
let package_info: Value = toml::from_str(toml_content)?;
assert_eq!(package_info["dependencies"]["serde"].as_str(), Some("1.0"));
assert_eq!(package_info["package"]["name"].as_str(),
Some("your_package"));
Ok(())
}
使用[serde],将 toml 解析为您自己的结构。
# #[macro_use]
# extern crate error_chain;
#[macro_use]
extern crate serde_derive;
extern crate toml;
use std::collections::HashMap;
#[derive(Deserialize)]
struct Config {
package: Package,
dependencies: HashMap<String, String>,
}
#[derive(Deserialize)]
struct Package {
name: String,
version: String,
authors: Vec<String>,
}
#
# error_chain! {
# foreign_links {
# Toml(toml::de::Error);
# }
# }
fn run() -> Result<()> {
let toml_content = r#"
[package]
name = "your_package"
version = "0.1.0"
authors = ["You! <[email protected]>"]
[dependencies]
serde = "1.0"
"#;
let package_info: Config = toml::from_str(toml_content)?;
assert_eq!(package_info.package.name, "your_package");
assert_eq!(package_info.package.version, "0.1.0");
assert_eq!(package_info.package.authors, vec!["You! <[email protected]>"]);
assert_eq!(package_info.dependencies["serde"], "1.0");
Ok(())
}
#
# quick_main!(run);