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 cmd: serde_json::Value = json!({
31 "plugin": "pfx",
32 "name": "list_all_certificates",
33 });
34
35 let value = match self
36 .client
37 .send_and_wait(Message::Text(cmd.to_string().into()))
38 {
39 Ok(Message::Text(str)) => serde_json::from_str::<ListAllCertificatesResponse>(&str),
40 _ => Ok(ListAllCertificatesResponse::default()),
41 };
42
43 Ok(value.map(|s| s.certificates)?)
44 }
45}