1use darkfi::{
20 rpc::{client::RpcClient, jsonrpc::JsonRequest},
21 util::encoding::base64,
22 Result,
23};
24use darkfi_serial::{deserialize, serialize};
25use genevd::GenEvent;
26use log::debug;
27use tinyjson::JsonValue;
28
29pub struct Gen {
30 pub rpc_client: RpcClient,
31}
32
33impl Gen {
34 pub async fn close_connection(&self) {
35 self.rpc_client.stop().await;
36 }
37
38 pub async fn add(&self, event: GenEvent) -> Result<()> {
40 let event = JsonValue::String(base64::encode(&serialize(&event)));
41
42 let req = JsonRequest::new("add", JsonValue::Array([event].to_vec()));
43 let rep = self.rpc_client.request(req).await?;
44
45 debug!("Got reply: {:?}", rep);
46 Ok(())
47 }
48
49 pub async fn list(&self) -> Result<Vec<GenEvent>> {
51 let req = JsonRequest::new("list", JsonValue::Array([].to_vec()));
52 let rep = self.rpc_client.request(req).await?;
53
54 debug!("reply: {:?}", rep);
55
56 let bytes: Vec<u8> = base64::decode(rep.get::<String>().unwrap()).unwrap();
57 let events: Vec<GenEvent> = deserialize(&bytes)?;
58
59 Ok(events)
60 }
61}