use anyhow::Result;
use futures_util::StreamExt;
use protocol::{
api::{Client, Server},
message::{client::ClientMessage, server::ServerMessage},
};
pub struct CronClient<S> {
server: S,
}
impl<S: Server> CronClient<S> {
pub fn new(server: S) -> Self {
Self { server }
}
}
impl<S: Server + Send> Client for CronClient<S> {
async fn request(&mut self, msg: ClientMessage) -> Result<ServerMessage> {
let stream = self.server.dispatch(msg);
futures_util::pin_mut!(stream);
stream
.next()
.await
.ok_or_else(|| anyhow::anyhow!("server returned empty response"))
}
fn request_stream(
&mut self,
msg: ClientMessage,
) -> impl futures_core::Stream<Item = Result<ServerMessage>> + Send + '_ {
self.server.dispatch(msg).map(Ok)
}
}