rpc.rs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /* This file is part of DarkFi (https://dark.fi)
  2. *
  3. * Copyright (C) 2020-2023 Dyne.org foundation
  4. *
  5. * This program is free software: you can redistribute it and/or modify
  6. * it under the terms of the GNU Affero General Public License as
  7. * published by the Free Software Foundation, either version 3 of the
  8. * License, or (at your option) any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU Affero General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU Affero General Public License
  16. * along with this program. If not, see <https://www.gnu.org/licenses/>.
  17. */
  18. use darkfi::{
  19. rpc::{client::RpcClient, jsonrpc::JsonRequest},
  20. util::encoding::base64,
  21. Result,
  22. };
  23. use darkfi_serial::{deserialize, serialize};
  24. use genevd::GenEvent;
  25. use log::debug;
  26. use tinyjson::JsonValue;
  27. pub struct Gen {
  28. pub rpc_client: RpcClient,
  29. }
  30. impl Gen {
  31. pub async fn close_connection(&self) {
  32. self.rpc_client.stop().await;
  33. }
  34. /// Add a new task.
  35. pub async fn add(&self, event: GenEvent) -> Result<()> {
  36. let event = JsonValue::String(base64::encode(&serialize(&event)));
  37. let req = JsonRequest::new("add", JsonValue::Array([event].to_vec()));
  38. let rep = self.rpc_client.request(req).await?;
  39. debug!("Got reply: {:?}", rep);
  40. Ok(())
  41. }
  42. /// Get current open tasks ids.
  43. pub async fn list(&self) -> Result<Vec<GenEvent>> {
  44. let req = JsonRequest::new("list", JsonValue::Array([].to_vec()));
  45. let rep = self.rpc_client.request(req).await?;
  46. debug!("reply: {:?}", rep);
  47. let bytes: Vec<u8> = base64::decode(rep.get::<String>().unwrap()).unwrap();
  48. let events: Vec<GenEvent> = deserialize(&bytes)?;
  49. Ok(events)
  50. }
  51. }