如何从Rust创建TOML文件?

时间:2016-07-15 22:05:08

标签: rust toml

我已将所有数据收集到一个向量中,我需要使用该数据创建一个TOML文件。我已设法创建并打开一个文件:

@Mixin(Sub, *feature_args, **feature_kwargs)
class RealSub:
    # Lots of code ...

class RealSub:
    # Lots of code ...
class WrappedSub(Feature, RealSub):
    def __init__(self, *sub_args, **sub_kwargs):
        Feature.__init__(self, *feature_args, **feature_kwargs)
        RealSub.__init__(self, *sub_args, **sub_kwargs)
RealSub = WrappedSub

我的let mut file = try!(File::create("servers.toml")); 包含以下数据,在TOML中应如下所示。

vector<(string,(string, u32))>

我有很多需要用TOML编写的数据,我知道TOML是一个文本文件。编码器如何用于?

1 个答案:

答案 0 :(得分:4)

这使用TOML crate进行结构和序列化。主要好处是应该正确地逃避价值。

extern crate toml;

use toml::Value;
use std::collections::BTreeMap;
use std::io::prelude::*;

fn to_toml(v: Vec<(String, (String, u32))>) -> Value {
    let mut servers = BTreeMap::new();
    for (name, (ip_addr, port)) in v {
        let mut server = BTreeMap::new();
        server.insert("Ipaddr".into(), Value::String(ip_addr));
        server.insert("Port no".into(), Value::Integer(port as i64));
        servers.insert(name, Value::Table(server));
    }

    let mut map = BTreeMap::new();
    map.insert("server".into(), Value::Table(servers));
    Value::Table(map)
}

fn main() {
    let v = vec![("A".into(), ("192.168.4.1".into(), 4476)),
                 ("B".into(), ("192.168.4.8".into(), 1234))];

    let toml_string = toml::encode_str(&to_toml(v));
    println!("{}", toml_string);

    let mut file = std::fs::File::create("servers.toml").unwrap();
    file.write_all(toml_string.as_bytes()).expect("Could not write to file!");
}
相关问题