jst 0.0.3

Write a javascript object in rust
Documentation
use crate::{Obj, Val};
use num::ToPrimitive;
use std::{self, collections::HashMap};

// todo
// val.is_equal(&str | String | bool | obj!{}, arr![], regex);
// val.is_match(&str | String | bool | obj!{}, arr![], regex );
// val.is_bool(); // 
// val.is_str();

impl std::convert::From<String> for Val {
    fn from(v: String) -> Val {
        Val::Str(v)
    }
}

impl std::convert::From<&str> for Val {
    fn from(v: &str) -> Val {
        Val::Str(v.into())
    }
}

impl std::convert::From<Vec<Val>> for Val {
    fn from(v: Vec<Val>) -> Val {
        Val::Array(v)
    }
}

impl std::convert::From<HashMap<String, Val>> for Val {
    fn from(v: HashMap<String, Val>) -> Val {
        Val::Obj(Obj::from_map(v))
    }
}

impl std::convert::From<Obj> for Val {
    fn from(v: Obj) -> Val {
        Val::Obj(v)
    }
}

impl std::convert::From<bool> for Val {
    fn from(v: bool) -> Val {
        Val::Bool(v)
    }
}

macro_rules! impl_from_num {
($($type:ident),*) => (
   $(

       impl std::convert::From<$type> for Val {
           fn from(v: $type) -> Val {
               Val::Num(v.to_f64().unwrap())
            }
        }
    )*
)
}

impl_from_num!(usize, u8, u16, u32, u64, u128, i8, i16, i32, i64, i128, f32, f64);