use js_sys;
use wasm_bindgen::prelude::*;
use crate::error::Error;
use crate::prelude::jsonrpc_core;
use crate::prelude::rings_core::utils::js_value;
pub fn parse_params(params: JsValue) -> Result<jsonrpc_core::Params, Error> {
let params = if params.is_null() {
jsonrpc_core::Params::None
} else if js_sys::Array::is_array(¶ms) {
let arr = js_sys::Array::from(¶ms);
let v = arr
.iter()
.flat_map(|x| js_value::deserialize::<serde_json::Value>(&x).ok())
.collect::<Vec<serde_json::Value>>();
jsonrpc_core::Params::Array(v)
} else if params.is_object() {
let mut s_map = serde_json::Map::new();
let obj = js_sys::Object::from(params);
let entries = js_sys::Object::entries(&obj);
for e in entries.iter() {
if js_sys::Array::is_array(&e) {
let arr = js_sys::Array::from(&e);
if arr.length() != 2 {
continue;
}
let k = arr.get(0);
let v = arr.get(1);
s_map.insert(k.as_string().unwrap(), js_value::deserialize(&v).unwrap());
}
}
jsonrpc_core::Params::Map(s_map)
} else {
return Err(Error::JsError("unsupported params".to_owned()));
};
Ok(params)
}