e_imzo/
lib.rs

1#![allow(clippy::never_loop)]
2#![allow(clippy::result_large_err)]
3
4pub mod client;
5pub mod error;
6pub mod prelude;
7
8// Public re-exports
9pub 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}