Skip to main content

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 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}