use serde_json::{json, Map, Number, Value as JSONValue};
use crate::myerror::*;
use crate::{mysome};
use itertools::Itertools;
pub fn mymap_set_bool(mut parent: &mut Map<String, JSONValue>, path:&str, value:bool) ->Result<(),MyError> {
let arr=path.split(".").collect_vec();
let length=arr.len();
if length==1 {
let key= * mysome!(arr.get(0));
parent.insert((key).parse().unwrap(), JSONValue::Bool(value));
return Ok(());
}
for i in 0..length-1 {
let key = *mysome!(arr.get(i));
let read_parent=&parent;
let has_value = read_parent.get (key).is_some();
if has_value {
let point=parent.get_mut(key).unwrap();
parent=mysome!(point.as_object_mut());
} else{
parent.insert((key).parse().unwrap(), json!({}));
let point=parent.get_mut(key).unwrap();
parent=mysome!(point.as_object_mut());
}
}
let key= * mysome!(arr.get(length-1));
if key.len()==0{
return Err(MyError::new(format!("key错误:{}",path)));
}
parent.insert((&key).parse().unwrap(), JSONValue::Bool(value));
Ok(())
}
pub fn mymap_set_i64(mut parent: &mut Map<String, JSONValue>, path:&str, value:i64) ->Result<(),MyError> {
let arr=path.split(".").collect_vec();
let length=arr.len();
if length==1 {
let key= * mysome!(arr.get(0));
parent.insert((key).parse().unwrap(), JSONValue::Number(Number::from(value)));
return Ok(());
}
for i in 0..length-1 {
let key = *mysome!(arr.get(i));
let read_parent=&parent;
let has_value = read_parent.get (key).is_some();
if has_value {
let point=parent.get_mut(key).unwrap();
parent=mysome!(point.as_object_mut());
} else{
parent.insert((key).parse().unwrap(), json!({}));
let point=parent.get_mut(key).unwrap();
parent=mysome!(point.as_object_mut());
}
}
let key= * mysome!(arr.get(length-1));
if key.len()==0{
return Err(MyError::new(format!("key错误:{}",path)));
}
parent.insert((&key).parse().unwrap(), JSONValue::Number(Number::from(value)));
Ok(())
}
pub fn mymap_set_f64(mut parent: &mut Map<String, JSONValue>, path:&str, value:f64) ->Result<(),MyError> {
let arr=path.split(".").collect_vec();
let length=arr.len();
if length==1 {
let key= * mysome!(arr.get(0));
parent.insert((key).parse().unwrap(), JSONValue::Number(mysome!(Number::from_f64(value))));
return Ok(());
}
for i in 0..length-1 {
let key = *mysome!(arr.get(i));
let read_parent=&parent;
let has_value = read_parent.get (key).is_some();
if has_value {
let point=parent.get_mut(key).unwrap();
parent=mysome!(point.as_object_mut());
} else{
parent.insert((key).parse().unwrap(), json!({}));
let point=parent.get_mut(key).unwrap();
parent=mysome!(point.as_object_mut());
}
}
let key= * mysome!(arr.get(length-1));
if key.len()==0{
return Err(MyError::new(format!("key错误:{}",path)));
}
parent.insert((&key).parse().unwrap(), JSONValue::Number(mysome!(Number::from_f64(value))));
Ok(())
}
pub fn mymap_set_string(mut parent: &mut Map<String, JSONValue>, path:&str, value:&str) ->Result<(),MyError> {
let arr=path.split(".").collect_vec();
let length=arr.len();
if length==1 {
let key= * mysome!(arr.get(0));
parent.insert((key).parse().unwrap(), JSONValue::String(String::from(value)));
return Ok(());
}
for i in 0..length-1 {
let key = *mysome!(arr.get(i));
let read_parent=&parent;
let has_value = read_parent.get (key).is_some();
if has_value {
let point=parent.get_mut(key).unwrap();
parent=mysome!(point.as_object_mut());
} else{
parent.insert((key).parse().unwrap(), json!({}));
let point=parent.get_mut(key).unwrap();
parent=mysome!(point.as_object_mut());
}
}
let key= * mysome!(arr.get(length-1));
if key.len()==0{
return Err(MyError::new(format!("key错误:{}",path)));
}
parent.insert((&key).parse().unwrap(), JSONValue::String(String::from(value)));
Ok(())
}
pub fn mymap_get_bool(parent: & Map<String, JSONValue>,path:&str,default_value:bool)->bool {
let arr=path.split(".").collect_vec();
let length=arr.len();
if length==1 {
let key= * mysome!(arr.get(0),#,default_value);
if key.len()==0{
return default_value;
}
let result= mysome!(mysome!(parent.get(key),#,default_value).as_bool(),#,default_value);
return result;
}
let mut point= parent;
for i in 0..length-1 {
let key= * mysome!(arr.get(i),#,default_value);
point=mysome!(mysome!(point.get(key),#,default_value).as_object(),#,default_value);
}
let key= * mysome!(arr.get(length-1),#,default_value);
if key.len()==0{
return default_value;
}
let b=mysome!(point.get(key),#,default_value);
let c=mysome!(b.as_bool(),#,default_value);
let result= c;
return result;
}
pub fn mymap_get_i64(parent: & Map<String, JSONValue>,path:&str,default_value:i64)->i64 {
let arr=path.split(".").collect_vec();
let length=arr.len();
if length==1 {
let key= * mysome!(arr.get(0),#,default_value);
if key.len()==0{
return default_value;
}
let result= mysome!(mysome!(parent.get(key),#,default_value).as_i64(),#,default_value);
return result;
}
let mut point= parent;
for i in 0..length-1 {
let key= * mysome!(arr.get(i),#,default_value);
point=mysome!(mysome!(point.get(key),#,default_value).as_object(),#,default_value);
}
let key= * mysome!(arr.get(length-1),#,default_value);
if key.len()==0{
return default_value;
}
let b=mysome!(point.get(key),#,default_value);
let c=mysome!(b.as_i64(),#,default_value);
let result= c;
return result;
}
pub fn mymap_get_f64(parent: & Map<String, JSONValue>,path:&str,default_value:f64)->f64 {
let arr=path.split(".").collect_vec();
let length=arr.len();
if length==1 {
let key= * mysome!(arr.get(0),#,default_value);
if key.len()==0{
return default_value;
}
let result= mysome!(mysome!(parent.get(key),#,default_value).as_f64(),#,default_value);
return result;
}
let mut point= parent;
for i in 0..length-1 {
let key= * mysome!(arr.get(i),#,default_value);
point=mysome!(mysome!(point.get(key),#,default_value).as_object(),#,default_value);
}
let key= * mysome!(arr.get(length-1),#,default_value);
if key.len()==0{
return default_value;
}
let b=mysome!(point.get(key),#,default_value);
let c=mysome!(b.as_f64(),#,default_value);
let result= c;
return result;
}
pub fn mymap_get_string(parent: & Map<String, JSONValue>,path:&str,default_value_str: &str)->String {
let default_value=default_value_str.to_owned();
let arr=path.split(".").collect_vec();
let length=arr.len();
if length==1 {
let key= * mysome!(arr.get(0),#,default_value);
if key.len()==0{
return default_value;
}
let result= mysome!(mysome!(parent.get(key),#,default_value).as_str(),#,default_value);
return result.to_owned();
}
let mut point= parent;
for i in 0..length-1 {
let key= * mysome!(arr.get(i),#,default_value);
point=mysome!(mysome!(point.get(key),#,default_value).as_object(),#,default_value);
}
let key= * mysome!(arr.get(length-1),#,default_value);
if key.len()==0{
return default_value;
}
let b=mysome!(point.get(key),#,default_value);
let c=mysome!(b.as_str(),#,default_value);
let result= c;
return result.to_owned();
}