|
@@ -1,48 +1,15 @@
|
|
|
-use async_std::sync::Arc;
|
|
|
|
|
-
|
|
|
|
|
-use async_executor::Executor;
|
|
|
|
|
-use log::debug;
|
|
|
|
|
use serde_json::{json, Value};
|
|
use serde_json::{json, Value};
|
|
|
-use url::Url;
|
|
|
|
|
|
|
|
|
|
use darkfi::{
|
|
use darkfi::{
|
|
|
- rpc::jsonrpc::{self, JsonResult},
|
|
|
|
|
- Error, Result,
|
|
|
|
|
|
|
+ rpc::{jsonrpc, rpcclient::RpcClient},
|
|
|
|
|
+ Result,
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-pub struct JsonRpcClient {
|
|
|
|
|
- sender: async_channel::Sender<Value>,
|
|
|
|
|
- receiver: async_channel::Receiver<JsonResult>,
|
|
|
|
|
|
|
+pub struct Rpc {
|
|
|
|
|
+ pub client: RpcClient,
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-impl JsonRpcClient {
|
|
|
|
|
- pub async fn new(url: Url, executor: Arc<Executor<'_>>) -> Result<Self> {
|
|
|
|
|
- let (sender, receiver) = jsonrpc::open_channels(&url, executor).await?;
|
|
|
|
|
- Ok(Self { sender, receiver })
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- async fn request(&self, value: Value) -> Result<Value> {
|
|
|
|
|
- self.sender.send(value).await?;
|
|
|
|
|
- let reply: JsonResult = self.receiver.recv().await?;
|
|
|
|
|
-
|
|
|
|
|
- match reply {
|
|
|
|
|
- JsonResult::Resp(r) => {
|
|
|
|
|
- debug!(target: "RPC", "<-- {}", serde_json::to_string(&r)?);
|
|
|
|
|
- Ok(r.result)
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- JsonResult::Err(e) => {
|
|
|
|
|
- debug!(target: "RPC", "<-- {}", serde_json::to_string(&e)?);
|
|
|
|
|
- Err(Error::JsonRpcError(e.error.message.to_string()))
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- JsonResult::Notif(n) => {
|
|
|
|
|
- debug!(target: "RPC", "<-- {}", serde_json::to_string(&n)?);
|
|
|
|
|
- Err(Error::JsonRpcError("Unexpected reply".to_string()))
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
|
|
+impl Rpc {
|
|
|
// RPCAPI:
|
|
// RPCAPI:
|
|
|
// Add new task and returns `true` upon success.
|
|
// Add new task and returns `true` upon success.
|
|
|
// --> {"jsonrpc": "2.0", "method": "add",
|
|
// --> {"jsonrpc": "2.0", "method": "add",
|
|
@@ -60,7 +27,7 @@ impl JsonRpcClient {
|
|
|
// <-- {"jsonrpc": "2.0", "result": true, "id": 1}
|
|
// <-- {"jsonrpc": "2.0", "result": true, "id": 1}
|
|
|
pub async fn add(&self, params: Value) -> Result<Value> {
|
|
pub async fn add(&self, params: Value) -> Result<Value> {
|
|
|
let req = jsonrpc::request(json!("add"), params);
|
|
let req = jsonrpc::request(json!("add"), params);
|
|
|
- self.request(json!(req)).await
|
|
|
|
|
|
|
+ self.client.request(req).await
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// List tasks
|
|
// List tasks
|
|
@@ -68,7 +35,7 @@ impl JsonRpcClient {
|
|
|
// <-- {"jsonrpc": "2.0", "result": [task_id, ...], "id": 1}
|
|
// <-- {"jsonrpc": "2.0", "result": [task_id, ...], "id": 1}
|
|
|
pub async fn get_ids(&self, params: Value) -> Result<Value> {
|
|
pub async fn get_ids(&self, params: Value) -> Result<Value> {
|
|
|
let req = jsonrpc::request(json!("get_ids"), json!(params));
|
|
let req = jsonrpc::request(json!("get_ids"), json!(params));
|
|
|
- self.request(json!(req)).await
|
|
|
|
|
|
|
+ self.client.request(req).await
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Update task and returns `true` upon success.
|
|
// Update task and returns `true` upon success.
|
|
@@ -76,7 +43,7 @@ impl JsonRpcClient {
|
|
|
// <-- {"jsonrpc": "2.0", "result": true, "id": 1}
|
|
// <-- {"jsonrpc": "2.0", "result": true, "id": 1}
|
|
|
pub async fn update(&self, id: u64, data: Value) -> Result<Value> {
|
|
pub async fn update(&self, id: u64, data: Value) -> Result<Value> {
|
|
|
let req = jsonrpc::request(json!("update"), json!([id, data]));
|
|
let req = jsonrpc::request(json!("update"), json!([id, data]));
|
|
|
- self.request(json!(req)).await
|
|
|
|
|
|
|
+ self.client.request(req).await
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Set state for a task and returns `true` upon success.
|
|
// Set state for a task and returns `true` upon success.
|
|
@@ -84,7 +51,7 @@ impl JsonRpcClient {
|
|
|
// <-- {"jsonrpc": "2.0", "result": true, "id": 1}
|
|
// <-- {"jsonrpc": "2.0", "result": true, "id": 1}
|
|
|
pub async fn set_state(&self, id: u64, state: &str) -> Result<Value> {
|
|
pub async fn set_state(&self, id: u64, state: &str) -> Result<Value> {
|
|
|
let req = jsonrpc::request(json!("set_state"), json!([id, state]));
|
|
let req = jsonrpc::request(json!("set_state"), json!([id, state]));
|
|
|
- self.request(json!(req)).await
|
|
|
|
|
|
|
+ self.client.request(req).await
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Set comment for a task and returns `true` upon success.
|
|
// Set comment for a task and returns `true` upon success.
|
|
@@ -92,7 +59,7 @@ impl JsonRpcClient {
|
|
|
// <-- {"jsonrpc": "2.0", "result": true, "id": 1}
|
|
// <-- {"jsonrpc": "2.0", "result": true, "id": 1}
|
|
|
pub async fn set_comment(&self, id: u64, content: &str) -> Result<Value> {
|
|
pub async fn set_comment(&self, id: u64, content: &str) -> Result<Value> {
|
|
|
let req = jsonrpc::request(json!("set_comment"), json!([id, content]));
|
|
let req = jsonrpc::request(json!("set_comment"), json!([id, content]));
|
|
|
- self.request(json!(req)).await
|
|
|
|
|
|
|
+ self.client.request(req).await
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Get task by id.
|
|
// Get task by id.
|
|
@@ -100,6 +67,6 @@ impl JsonRpcClient {
|
|
|
// <-- {"jsonrpc": "2.0", "result": "task", "id": 1}
|
|
// <-- {"jsonrpc": "2.0", "result": "task", "id": 1}
|
|
|
pub async fn get_task_by_id(&self, id: u64) -> Result<Value> {
|
|
pub async fn get_task_by_id(&self, id: u64) -> Result<Value> {
|
|
|
let req = jsonrpc::request(json!("get_task_by_id"), json!([id]));
|
|
let req = jsonrpc::request(json!("get_task_by_id"), json!([id]));
|
|
|
- self.request(json!(req)).await
|
|
|
|
|
|
|
+ self.client.request(req).await
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|