我已将所有数据收集到一个向量中,我需要使用该数据创建一个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是一个文本文件。编码器如何用于?
答案 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!");
}