whiledb 0.1.4

rust implementation of WhileDB language
Documentation
use crate::interpreter::*;


pub fn init_state() -> Result<Any> {
    let initial_attrs = maplit::hashmap! {
    };
    let state = Rc::new(RefCell::new(WdAny::Obj(Object{
        buildin: BuildIn::Not,
        attrs: initial_attrs
    })));
    let type_none_obj = obj_none::buildin_none(state.clone())?;
    let type_type_obj = obj_type::buildin_type(state.clone())?;
    let type_bool_obj = obj_bool::buildin_bool(state.clone())?;
    let type_int_obj = obj_int::buildin_int(state.clone())?;
    let type_float_obj = obj_float::buildin_float(state.clone())?;
    let type_string_obj = obj_string::buildin_string(state.clone())?;
    let type_list_obj = obj_list::buildin_list(state.clone())?;
    obj_none::buildin_none_post(type_none_obj, state.clone())?;
    obj_type::buildin_type_post(type_type_obj, state.clone())?;
    obj_bool::buildin_bool_post(type_bool_obj, state.clone())?;
    obj_int::buildin_int_post(type_int_obj, state.clone())?;
    obj_float::buildin_float_post(type_float_obj, state.clone())?;
    obj_string::buildin_string_post(type_string_obj, state.clone())?;
    obj_list::buildin_list_post(type_list_obj, state.clone())?;
    let dependent_attrs = maplit::hashmap! {
        "print".to_string() => Rc::new(RefCell::new(
            WdAny::Func("print".to_string(), Function::BuildInFunction(BuildInFunction(buildin_print)))
        )),
    };
    for (k, v) in dependent_attrs.into_iter() {
        utils::set_attr(state.clone(), &k, v)?;
    }
    Ok(state)
}


fn buildin_print(args: VecDeque<Any>, state: Any) -> Result<Any> {
    for arg in args.into_iter() {
        let tmp = utils::convert2string(arg, state.clone())?;
        print!("{} ", tmp);
    }
    println!();
    utils::get_buildin_var("None", state)
}