2016-07-15 3 views
0

すべてのデータをベクターに集めました。そのデータでTOMLファイルを作成する必要があります。私は、ファイルを作成して開くために管理している:RustからTOMLファイルを作成するには?

let mut file = try!(File::create("servers.toml")); 

vector<(string,(string, u32))>はTOMLで次のようになります。以下のデータが含まれています。

[server.A] 
Ipaddr="192.168.4.1" 
Port no=4476 

[server.B] 
...... 

TOMLに書き込む必要があるデータがたくさんあります.TOMLはテキストファイルです。エンコーダはどのように使用されていますか?

+0

ようこそスタックオーバーフロー!あなたの質問を編集してください。質問をするときは、(あなたは努力をしていることが期待されます)(http://meta.stackoverflow.com/q/261592/155423)これは、人々があなたのために無料でコードを書くサービスではありません! – Shepmaster

+0

また、 'vector <(string、(string、u32))>'は、少なくとも標準ライブラリを使用する場合、有効な型ではありません。標準ライブラリにない型を使用している場合は、その型を質問に含める必要があります。人々はあなたの問題をよりよく理解して助けてくれる[MCVE]を作ります。 – Shepmaster

答えて

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!"); 
} 
関連する問題