6 use std::io::prelude::*;
8 use serde_json::Value as Json;
9 use toml::Value as Toml;
12 let mut args = env::args();
13 let mut input = String::new();
15 let name = args.nth(1).unwrap();
17 .and_then(|mut f| f.read_to_string(&mut input))
20 io::stdin().read_to_string(&mut input).unwrap();
25 let json = convert(toml);
26 println!("{}", serde_json::to_string_pretty(&json).unwrap());
28 Err(error) => println!("failed to parse TOML: {}", error),
32 fn convert(toml: Toml) -> Json {
34 Toml::String(s) => Json::String(s),
35 Toml::Integer(i) => Json::Number(i.into()),
37 let n = serde_json::Number::from_f64(f).expect("float infinite and nan not allowed");
40 Toml::Boolean(b) => Json::Bool(b),
41 Toml::Array(arr) => Json::Array(arr.into_iter().map(convert).collect()),
42 Toml::Table(table) => {
43 Json::Object(table.into_iter().map(|(k, v)| (k, convert(v))).collect())
45 Toml::Datetime(dt) => Json::String(dt.to_string()),