1#![allow(clippy::never_loop)]
2#![allow(clippy::result_large_err)]
3
4pub mod client;
5pub mod error;
6pub mod prelude;
7
8pub use error::{EIMZOError as Error, Result};
10
11use client::{Client, Connected, Disconnected};
12use prelude::*;
13use serde_json::json;
14use tungstenite::Message;
15
16pub struct EIMZO<State> {
17 client: Client<State>,
18}
19
20impl EIMZO<Disconnected> {
21 pub fn new() -> Result<EIMZO<Connected>> {
22 Ok(EIMZO {
23 client: Client::connect::<String>(None)?,
24 })
25 }
26}
27
28impl EIMZO<Connected> {
29 pub fn list_all_certificates(&mut self) -> Result<Vec<Certificate>> {
30 let _ = self.client.set_api_keys();
31
32 let cmd: serde_json::Value = json!({
33 "plugin": "pfx",
34 "name": "list_all_certificates",
35 });
36
37 let value = match self
38 .client
39 .send_and_wait(Message::Text(cmd.to_string().into()))
40 {
41 Ok(Message::Text(str)) => serde_json::from_str::<ListAllCertificatesResponse>(&str),
42 _ => Ok(ListAllCertificatesResponse::default()),
43 };
44
45 Ok(value.map(|s| s.certificates)?)
46 }
47}