]> git.proxmox.com Git - rustc.git/blame - src/vendor/toml-0.3.2/examples/toml2json.rs
New upstream version 1.19.0+dfsg3
[rustc.git] / src / vendor / toml-0.3.2 / examples / toml2json.rs
CommitLineData
7cac9316
XL
1#![deny(warnings)]
2
3extern crate toml;
4extern crate serde_json;
5
6use std::fs::File;
7use std::env;
8use std::io;
9use std::io::prelude::*;
10
11use toml::Value as Toml;
12use serde_json::Value as Json;
13
14fn main() {
15 let mut args = env::args();
16 let mut input = String::new();
17 if args.len() > 1 {
18 let name = args.nth(1).unwrap();
19 File::open(&name).and_then(|mut f| {
20 f.read_to_string(&mut input)
21 }).unwrap();
22 } else {
23 io::stdin().read_to_string(&mut input).unwrap();
24 }
25
26 match input.parse() {
27 Ok(toml) => {
28 let json = convert(toml);
29 println!("{}", serde_json::to_string_pretty(&json).unwrap());
30 }
31 Err(error) => println!("failed to parse TOML: {}", error),
32 }
33}
34
35fn convert(toml: Toml) -> Json {
36 match toml {
37 Toml::String(s) => Json::String(s),
38 Toml::Integer(i) => Json::Number(i.into()),
39 Toml::Float(f) => {
40 let n = serde_json::Number::from_f64(f)
41 .expect("float infinite and nan not allowed");
42 Json::Number(n)
43 }
44 Toml::Boolean(b) => Json::Bool(b),
45 Toml::Array(arr) => Json::Array(arr.into_iter().map(convert).collect()),
46 Toml::Table(table) => Json::Object(table.into_iter().map(|(k, v)| {
47 (k, convert(v))
48 }).collect()),
49 Toml::Datetime(dt) => Json::String(dt.to_string()),
50 }
51}