]> git.proxmox.com Git - rustc.git/blob - src/vendor/toml/examples/toml2json.rs
0d406804a38be144de5fbef88fe0f19dbeee8219
[rustc.git] / src / vendor / toml / examples / toml2json.rs
1 #![deny(warnings)]
2
3 extern crate toml;
4 extern crate rustc_serialize;
5
6 use std::fs::File;
7 use std::env;
8 use std::io;
9 use std::io::prelude::*;
10
11 use toml::Value;
12 use rustc_serialize::json::Json;
13
14 fn main() {
15 let mut args = env::args();
16 let mut input = String::new();
17 let filename = 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 name
23 } else {
24 io::stdin().read_to_string(&mut input).unwrap();
25 "<stdin>".to_string()
26 };
27
28 let mut parser = toml::Parser::new(&input);
29 let toml = match parser.parse() {
30 Some(toml) => toml,
31 None => {
32 for err in &parser.errors {
33 let (loline, locol) = parser.to_linecol(err.lo);
34 let (hiline, hicol) = parser.to_linecol(err.hi);
35 println!("{}:{}:{}-{}:{} error: {}",
36 filename, loline, locol, hiline, hicol, err.desc);
37 }
38 return
39 }
40 };
41 let json = convert(Value::Table(toml));
42 println!("{}", json.pretty());
43 }
44
45 fn convert(toml: Value) -> Json {
46 match toml {
47 Value::String(s) => Json::String(s),
48 Value::Integer(i) => Json::I64(i),
49 Value::Float(f) => Json::F64(f),
50 Value::Boolean(b) => Json::Boolean(b),
51 Value::Array(arr) => Json::Array(arr.into_iter().map(convert).collect()),
52 Value::Table(table) => Json::Object(table.into_iter().map(|(k, v)| {
53 (k, convert(v))
54 }).collect()),
55 Value::Datetime(dt) => Json::String(dt),
56 }
57 }