Procházet zdrojové kódy

yay, JSON merge works

Johann Woelper před 7 roky
rodič
revize
095a5862dc
1 změnil soubory, kde provedl 23 přidání a 15 odebrání
  1. 23 15
      src/main.rs

+ 23 - 15
src/main.rs

@@ -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")
     }