usc 1.20230730.1349

A common lib for unitedservices
Documentation

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();
}