Просмотр исходного кода

darkfid: Add Options to SQL methods.

parazyd 3 лет назад
Родитель
Сommit
83a069110c
2 измененных файлов с 47 добавлено и 1 удалено
  1. 1 1
      bin/darkfid/src/main.rs
  2. 46 0
      bin/darkfid/src/rpc_wallet.rs

+ 1 - 1
bin/darkfid/src/main.rs

@@ -332,7 +332,7 @@ async fn realmain(args: Args, ex: Arc<smol::Executor<'_>>) -> Result<()> {
     }
 
     if args.single_node {
-        info!("Node is configured to tun in single-node mode!");
+        info!("Node is configured to run in single-node mode!");
     }
 
     // Initialize validator state

+ 46 - 0
bin/darkfid/src/rpc_wallet.rs

@@ -257,6 +257,24 @@ impl Darkfid {
                         row_ret.push(json!(value));
                     }
 
+                    QueryType::OptionInteger => {
+                        let value: Option<i32> = match row.try_get(col) {
+                            Ok(v) => Some(v),
+                            Err(_) => None,
+                        };
+
+                        row_ret.push(json!(value));
+                    }
+
+                    QueryType::OptionBlob => {
+                        let value: Option<Vec<u8>> = match row.try_get(col) {
+                            Ok(v) => Some(v),
+                            Err(_) => None,
+                        };
+
+                        row_ret.push(json!(value));
+                    }
+
                     _ => unreachable!(),
                 }
             }
@@ -315,6 +333,34 @@ impl Darkfid {
 
                     query = query.bind(val);
                 }
+
+                QueryType::OptionInteger => {
+                    let val: Option<i32> = match serde_json::from_value(pair[1].clone()) {
+                        Ok(v) => v,
+                        Err(e) => {
+                            error!(
+                                "[RPC] wallet.exec_sql: Failed casting value to Option<i32>: {}",
+                                e
+                            );
+                            return JsonError::new(ParseError, None, id).into()
+                        }
+                    };
+
+                    query = query.bind(val);
+                }
+
+                QueryType::OptionBlob => {
+                    let val: Option<Vec<u8>> = match serde_json::from_value(pair[1].clone()) {
+                        Ok(v) => v,
+                        Err(e) => {
+                            error!("[RPC] wallet.exec_sql: Failed casting value to Option<Vec<u8>>: {}", e);
+                            return JsonError::new(ParseError, None, id).into()
+                        }
+                    };
+
+                    query = query.bind(val);
+                }
+
                 _ => return JsonError::new(InvalidParams, None, id).into(),
             }
         }