pub mod clients;
pub trait Publish {
fn publish(&self) -> Result<(), Box<dyn std::error::Error>>;
}
pub trait Subscribe {
type Event;
fn subscribe(
callback: impl FnMut(Self::Event) -> () + Send + 'static,
) -> Result<impl Subscription, Box<dyn std::error::Error>>;
}
pub trait RequestHandler {
fn start<TRequest, TResponse>(
handle_fn: fn(TRequest) -> Result<TResponse, Box<dyn std::error::Error>>,
) -> Self
where
TRequest: RpcRequest + 'static + serde::de::DeserializeOwned + serde::Serialize,
TResponse: serde::Serialize + 'static;
fn stop(&self);
}
pub trait Subscription {
fn unsubscribe(self) -> Result<(), Box<dyn std::error::Error>>;
}
pub trait RpcRequest {
fn request<TResponse>(
&self,
) -> impl std::future::Future<Output = Result<TResponse, Box<dyn std::error::Error>>> + Send
where
TResponse: serde::de::DeserializeOwned + 'static;
}
#[derive(serde::Serialize, serde::Deserialize)]
pub struct RpcResponse<T> {
pub response: T,
}
#[cfg(feature = "mqtt")]
pub mod prelude {
pub use super::clients::mqtt::subscription::MqttSubscription;
pub use super::clients::mqtt::RpcRequestHandler;
pub use super::clients::mqtt::QOS;
pub use super::Publish;
pub use super::RequestHandler;
pub use super::RpcRequest;
pub use super::RpcResponse;
pub use super::Subscribe;
pub use super::Subscription;
pub use crate::clients::mqtt::MQTTCLIENT;
pub use meshpulse_derive::Event;
pub use meshpulse_derive::RpcRequest;
pub use paho_mqtt;
pub use serde::{Deserialize, Serialize};
pub use serde_json;
}