1use serde::{Deserialize, Serialize};
2
3pub fn json_to_struct<'a, T: Deserialize<'a>>(json_body: &'a str) -> Option<T> {
5 let json_struct_res:serde_json::error::Result<T> = serde_json::from_str(json_body);
6 match json_struct_res {
7 Ok(data) => { Some(data) }
8 Err(err) => {
9 log::error!("json.2.struct error {:?}\n{:?}", json_body, err);
10 None
11 }
12 }
13}
14pub fn json_to_struct_by<T: for<'a> Deserialize<'a>>(json_valve: &serde_json::Value) -> Option<T> {
15 let json_struct_res:serde_json::error::Result<T> = serde_json::from_value(json_valve.to_owned());
16 match json_struct_res {
17 Ok(data) => { Some(data) }
18 Err(err) => {
19 log::error!("json-value.2.struct error {:?}\n{:?}", json_valve, err);
20 None
21 }
22 }
23}
24pub fn json_to_json_value(json_body: &str) -> serde_json::Value {
25 serde_json::from_str(json_body).unwrap()
26}
27pub fn struct_to_json_str<T: Serialize>(data: &T) -> String {
29 let result = serde_json::to_string(data);
30 match result {
31 Ok(json_str) => { json_str }
32 Err(err) => {
33 log::error!("struct.2.json error {:?}", err);
34 "{}".to_string()
35 }
36 }
37}
38
39
40pub fn copy_struct< F: Serialize, T: for<'a> Deserialize<'a>>(from: F) -> Option<T> {
42 let from_json = serde_json::to_string(&from).unwrap();
43 let json_de_result: serde_json::error::Result<T> = serde_json::from_str(&from_json);
44 match json_de_result {
45 Ok(data) => { Some(data) }
46 Err(err) => {
47 log::error!("json parse to struct error {:?} {:?}", &from_json, err);
48 None
49 }
50 }
51}
52
53
54pub fn serde_json_map_to_hashmap(map: &serde_json::Map<String, serde_json::Value>) -> std::collections::HashMap<String, serde_json::Value> {
62 map.iter().map(|(k, v)| (k.clone(), v.clone())).collect()
63}