Documentation
extern crate serde;

use std::collections::HashMap;
use std::fs::File;

use hcproto::Value;

fn iter_json_to_value(v: serde_json::Value) -> Value {
    match v {
        serde_json::Value::Null => Value::Nil,
        serde_json::Value::Bool(b) => Value::Bool(b),
        serde_json::Value::Number(f) => {
            if f.is_u64() {
                Value::U64(f.as_u64().unwrap())
            } else if f.is_i64() {
                Value::I64(f.as_i64().unwrap())
            } else if f.is_f64() {
                Value::F64(f.as_f64().unwrap())
            } else {
                panic!("unreach!!!");
            }
        }
        serde_json::Value::String(s) => Value::Str(s),
        serde_json::Value::Array(vec) => {
            let mut ret = Vec::<Value>::new();
            for it in vec {
                ret.push(iter_json_to_value(it));
            }
            return Value::Arr(ret);
        }
        serde_json::Value::Object(map) => {
            let mut ret = HashMap::<Value, Value>::new();
            for (key, value) in map {
                ret.insert(Value::Str(key), iter_json_to_value(value));
            }
            return Value::Map(ret);
        }
    }
}

pub fn get_json() -> Value {
    let f = File::open("./examples/level4-full.json").unwrap();
    let v: serde_json::Value = serde_json::from_reader(f).unwrap();
    return iter_json_to_value(v);
}

fn main() {}