Kaynağa Gözat

darkfid: cleaned error handling on get_balances

lunar-mining 4 yıl önce
ebeveyn
işleme
607b5f6144
1 değiştirilmiş dosya ile 32 ekleme ve 33 silme
  1. 32 33
      src/bin/darkfid.rs

+ 32 - 33
src/bin/darkfid.rs

@@ -47,7 +47,7 @@ impl RequestHandler for Darkfid {
             Some("create_wallet") => return self.create_wallet(req.id, req.params).await,
             Some("create_wallet") => return self.create_wallet(req.id, req.params).await,
             Some("key_gen") => return self.key_gen(req.id, req.params).await,
             Some("key_gen") => return self.key_gen(req.id, req.params).await,
             Some("get_key") => return self.get_key(req.id, req.params).await,
             Some("get_key") => return self.get_key(req.id, req.params).await,
-            //Some("get_balances") => return self.get_balances(req.id, req.params).await,
+            Some("get_balances") => return self.get_balances(req.id, req.params).await,
             Some("get_token_id") => return self.get_token_id(req.id, req.params).await,
             Some("get_token_id") => return self.get_token_id(req.id, req.params).await,
             Some("features") => return self.features(req.id, req.params).await,
             Some("features") => return self.features(req.id, req.params).await,
             Some("deposit") => return self.deposit(req.id, req.params).await,
             Some("deposit") => return self.deposit(req.id, req.params).await,
@@ -134,40 +134,39 @@ impl Darkfid {
         return JsonResult::Resp(jsonresp(json!(b58), id));
         return JsonResult::Resp(jsonresp(json!(b58), id));
     }
     }
 
 
-    // TODO: clean up these upwraps
-    //
     // --> {"method": "get_key", "params": []}
     // --> {"method": "get_key", "params": []}
     // <-- {"result": "balances": "[value: 0, token: btc]"}
     // <-- {"result": "balances": "[value: 0, token: btc]"}
-    //async fn get_balances(&self, id: Value, _params: Value) -> JsonResult {
-    //    let result: Result<HashMap<String, u64>> = async {
-    //        let balances = self.client.lock().await.get_balances().await?;
-    //        let mut symbols = Vec::new();
-    //        let mut amounts = Vec::new();
-    //        let mut new_balances = HashMap::new();
-    //        for id in balances.keys() {
-    //            let id: jubjub::Fr = deserialize(&id)?;
-    //            //if let Some(symbol) = self.drk_tokenlist.clone().symbol_from_id(id.clone())? {
-    //            //    symbols.push(symbol);
-    //            //}
-
-    //            //for amount in balances.keys() {
-    //            //    amounts.push(amount);
-    //            //}
-    //        }
-    //        let mut new_balances = HashMap::new();
-    //        new_balances.insert(symbols, amounts);
-    //        let new_balances: HashMap<String, u64> = symbols
-    //            .iter()
-    //            .filter_map(|symbol| Some(amounts.iter()))
-    //            .collect();
-    //        Ok(new_balances)
-    //    }
-    //    .await;
-    //    match result {
-    //        Ok(res) => JsonResult::Resp(jsonresp(json!(res), json!(res))),
-    //        Err(err) => JsonResult::Err(jsonerr(InternalError, Some(err.to_string()), json!(id))),
-    //    }
-    //}
+    async fn get_balances(&self, id: Value, _params: Value) -> JsonResult {
+        let result: Result<HashMap<String, u64>> = async {
+            let balances = self.client.lock().await.get_balances().await?;
+            let mut symbols = Vec::new();
+            let mut amounts = Vec::new();
+
+            for id in balances.keys() {
+                let id: jubjub::Fr = deserialize(&id)?;
+                if let Some(symbol) = self.drk_tokenlist.clone().symbol_from_id(id)? {
+                    symbols.push(symbol);
+                }
+
+                for amount in balances.values() {
+                    amounts.push(amount);
+                }
+            }
+
+            let new_balances: HashMap<String, u64> = symbols
+                .into_iter()
+                .zip(amounts.into_iter())
+                .map(|(key, value)| return (key.clone(), value.clone()))
+                .collect();
+
+            Ok(new_balances)
+        }
+        .await;
+        match result {
+            Ok(res) => JsonResult::Resp(jsonresp(json!(res), json!(res))),
+            Err(err) => JsonResult::Err(jsonerr(InternalError, Some(err.to_string()), json!(id))),
+        }
+    }
 
 
     // --> {"method": "get_token_id", "params": [network, token]}
     // --> {"method": "get_token_id", "params": [network, token]}
     // <-- {"result": "Ht5G1RhkcKnpLVLMhqJc5aqZ4wYUEbxbtZwGCVbgU7DL"}
     // <-- {"result": "Ht5G1RhkcKnpLVLMhqJc5aqZ4wYUEbxbtZwGCVbgU7DL"}