Kaynağa Gözat

Implement "rpc" feature.

parazyd 4 yıl önce
ebeveyn
işleme
fa17139c6a
3 değiştirilmiş dosya ile 50 ekleme ve 28 silme
  1. 18 4
      Cargo.toml
  2. 31 23
      src/error.rs
  3. 1 1
      src/rpc/rpcserver.rs

+ 18 - 4
Cargo.toml

@@ -13,13 +13,20 @@ name = "darkfi"
 
 [dependencies]
 log = "0.4.14"
+rand = "0.8.4"
 thiserror = "1.0.30"
 
-# Async
+# async-runtime
+async-std = {version = "1.10.0", optional = true}
+async-executor = {version = "1.4.1", optional = true}
 async-trait = {version = "0.1.52", optional = true}
 futures = {version = "0.3.19", optional = true}
 smol = {version = "1.2.5", optional = true}
 
+# async-net
+async-native-tls = {version = "0.4.0", optional = true}
+native-tls = {version = "0.2.8", optional = true}
+
 # Encoding
 hex = {version = "0.4.3", optional = true}
 serde = {version = "1.0.133", features = ["derive"], optional = true}
@@ -27,14 +34,21 @@ serde_json = {version = "1.0.74", optional = true}
 
 # Utilities
 dirs = {version = "4.0.0", optional = true}
+url = {version = "2.2.2", optional = true}
 
 # Misc
 num-bigint = {version = "0.4.3", optional = true}
 
+# Websockets
+tungstenite = {version = "0.16.0", optional = true}
+async-tungstenite = {version = "0.16.1", optional = true}
+
 [features]
-async-runtime = ["async-trait", "futures", "smol"]
-util = ["async-runtime", "hex", "serde", "serde_json", "dirs",
-    "num-bigint"]
+async-runtime = ["async-std", "async-executor", "async-trait", "futures", "smol"]
+async-net = ["async-native-tls", "native-tls"]
+websockets = ["tungstenite", "async-tungstenite"]
+util = ["async-runtime", "hex", "serde", "serde_json", "dirs", "num-bigint"]
+rpc = ["async-net", "util", "websockets", "url"]
 
 # [dependencies.halo2_gadgets]
 # git = "https://github.com/parazyd/halo2_gadgets.git"

+ 31 - 23
src/error.rs

@@ -32,10 +32,12 @@ pub enum Error {
     // ParseFloatError(#[from] std::num::ParseFloatError),
     // #[error(transparent)]
     // FromHexError(#[from] hex::FromHexError),
-    // #[error("Url parse error `{0}`")]
-    // UrlParseError(String),
-    // #[error("No url found")]
-    // NoUrlFound,
+    #[cfg(feature = "rpc")]
+    #[error("Url parse error `{0}`")]
+    UrlParseError(String),
+
+    #[error("No url found")]
+    NoUrlFound,
     // #[error("Malformed packet")]
     // MalformedPacket,
     // #[error(transparent)]
@@ -126,10 +128,13 @@ pub enum Error {
 
     // #[error("Cannot parse network parameter")]
     // NetworkParseError,
-    // #[error("Async_Native_TLS error: `{0}`")]
-    // AsyncNativeTlsError(String),
-    // #[error("TungsteniteError: `{0}`")]
-    // TungsteniteError(String),
+    #[cfg(feature = "async-net")]
+    #[error("Async_Native_TLS error: `{0}`")]
+    AsyncNativeTlsError(String),
+
+    #[cfg(feature = "websockets")]
+    #[error("TungsteniteError: `{0}`")]
+    TungsteniteError(String),
 
     // /// Network
     // #[error("Connection failed")]
@@ -208,17 +213,19 @@ impl From<std::io::Error> for Error {
 // }
 // }
 
-// impl From<async_native_tls::Error> for Error {
-// fn from(err: async_native_tls::Error) -> Error {
-// Error::AsyncNativeTlsError(err.to_string())
-// }
-// }
+#[cfg(feature = "async-net")]
+impl From<async_native_tls::Error> for Error {
+    fn from(err: async_native_tls::Error) -> Error {
+        Error::AsyncNativeTlsError(err.to_string())
+    }
+}
 
-// impl From<url::ParseError> for Error {
-// fn from(err: url::ParseError) -> Error {
-// Error::UrlParseError(err.to_string())
-// }
-// }
+#[cfg(feature = "rpc")]
+impl From<url::ParseError> for Error {
+    fn from(err: url::ParseError) -> Error {
+        Error::UrlParseError(err.to_string())
+    }
+}
 
 // #[cfg(feature = "node")]
 // impl From<crate::node::client::ClientFailed> for Error {
@@ -233,11 +240,12 @@ impl From<std::io::Error> for Error {
 // }
 // }
 
-// impl From<tungstenite::Error> for Error {
-// fn from(err: tungstenite::Error) -> Error {
-// Error::TungsteniteError(err.to_string())
-// }
-// }
+#[cfg(feature = "websockets")]
+impl From<tungstenite::Error> for Error {
+    fn from(err: tungstenite::Error) -> Error {
+        Error::TungsteniteError(err.to_string())
+    }
+}
 
 // impl From<halo2::plonk::Error> for Error {
 // fn from(err: halo2::plonk::Error) -> Error {

+ 1 - 1
src/rpc/rpcserver.rs

@@ -14,7 +14,7 @@ use smol::{
 };
 
 use crate::{
-    util::rpc::jsonrpc::{JsonRequest, JsonResult},
+    rpc::jsonrpc::{JsonRequest, JsonResult},
     Result,
 };