use std::thread;
use std::time::Duration;
use serde::de::DeserializeOwned;
use serde::Deserialize;
use serde_json::Value;
pub use component::WsRpcClient;
use crate::{
err::ZbusErr,
message::{Request, Response},
};
use crate::err::ZbusResult;
mod component;
pub trait RpcClient {
fn invoke(&self, req: Request) -> ZbusResult<Value> {
self.deliver(req).and_then(|resp| {
if resp.status() == 200 {
Ok(resp.body())
} else {
Err(ZbusErr::err(resp.body().to_string()))
}
})
}
fn deliver(&self, req: Request) -> ZbusResult<Response>;
}
pub trait WebsocketClient {
fn connect(&self) -> bool;
fn reconnect(&mut self) -> bool;
fn message<S: Into<String>>(&self, id: S) -> ws::Message;
fn is_connected(&self) -> bool;
fn close(&self) -> bool;
fn send(&self, msg: ws::Message) -> bool;
}