use embassy_sync::blocking_mutex::raw::RawMutex;
use embassy_sync::channel::Channel;
use embassy_sync::signal::Signal;
use super::client::EmbassyClient;
use super::server::EmbassyServer;
pub struct EmbassyService<M: RawMutex + 'static, Req, Resp: 'static, const CHANNEL_DEPTH: usize> {
pub(crate) requests: Channel<M, (Req, &'static Signal<M, Resp>), CHANNEL_DEPTH>,
}
impl<M: RawMutex + 'static, Req, Resp: 'static, const CHANNEL_DEPTH: usize> Default
for EmbassyService<M, Req, Resp, CHANNEL_DEPTH>
{
fn default() -> Self {
Self::new()
}
}
impl<M: RawMutex + 'static, Req, Resp: 'static, const CHANNEL_DEPTH: usize>
EmbassyService<M, Req, Resp, CHANNEL_DEPTH>
{
pub const fn new() -> Self {
Self {
requests: Channel::new(),
}
}
pub fn client(&self) -> EmbassyClient<'_, M, Req, Resp, CHANNEL_DEPTH> {
EmbassyClient::new(self.requests.sender())
}
pub fn server(&self) -> EmbassyServer<'_, M, Req, Resp, CHANNEL_DEPTH> {
EmbassyServer::new(self)
}
}