|
|
@@ -20,6 +20,7 @@ use rocket::response::NamedFile;
|
|
|
|
|
|
use json_patch::patch;
|
|
|
use serde_json::from_str;
|
|
|
+use serde_json::to_string;
|
|
|
use json_patch::merge;
|
|
|
|
|
|
lazy_static! {
|
|
|
@@ -48,27 +49,34 @@ fn set(obj: String) -> String {
|
|
|
|
|
|
|
|
|
|
|
|
- let p: serde_json::Value = from_str(r#"[
|
|
|
- { "op": "test", "path": "/0/name", "value": "Andrew" },
|
|
|
- { "op": "add", "path": "/0/happy", "value": true }
|
|
|
- ]"#).unwrap();
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
// let json_result = json::parse(obj.to_owned().as_str());
|
|
|
// let json_result: serde_json::Value = from_str(obj.to_owned().as_str());
|
|
|
let json_result: Result<serde_json::Value, serde_json::Error> = from_str(obj.to_owned().as_str());
|
|
|
|
|
|
match json_result {
|
|
|
- Ok(j) => {
|
|
|
- println!("GOT {:?}", obj);
|
|
|
- let mut data = OBJECT.lock().unwrap();
|
|
|
- let current_object = json::parse(&data);
|
|
|
- println!("JSON INCOMING {:?}", j);
|
|
|
- println!("JSON CURRENT {:?}", current_object);
|
|
|
+ Ok(json_from_web) => {
|
|
|
+ let mut locked_obj = OBJECT.lock().unwrap();
|
|
|
+ // let current_object = json::parse(&locked_obj);
|
|
|
+ let mut parsed_object: Result<serde_json::Value, serde_json::Error> = from_str(&locked_obj);
|
|
|
+
|
|
|
+ match parsed_object {
|
|
|
+ Ok(mut json_object) => {
|
|
|
+ println!("{:?}", json_object);
|
|
|
+ merge(&mut json_object, &json_from_web);
|
|
|
+ *locked_obj = to_string(&json_object).unwrap();
|
|
|
+ println!("JSON MERGE {:?}", json_object);
|
|
|
|
|
|
- *data = obj;
|
|
|
- String::from("ok")
|
|
|
+ },
|
|
|
+ Err(e) => {
|
|
|
+ // The db is somehow corrupted, just put in what we got from the web
|
|
|
+ println!("Invalid json in db {:?}", e);
|
|
|
+ *locked_obj = to_string(&json_from_web).unwrap();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ println!("GOT {:?}", obj);
|
|
|
+ println!("JSON INCOMING {:?}", json_from_web);
|
|
|
+ String::from("Done")
|
|
|
},
|
|
|
Err(_e) => String::from("Invalid Json")
|
|
|
}
|