#![allow(dead_code)]
use crate::Msg;
use fibre::RecvError;
use fibre::mpmc::AsyncReceiver;
use super::states::CorePipeManagerXState;
#[derive(Debug)]
pub(crate) struct CorePipeManagerX {
pub(crate) state: CorePipeManagerXState,
}
impl CorePipeManagerX {
pub(crate) fn new() -> Self {
Self {
state: CorePipeManagerXState::new(),
}
}
pub(crate) fn attach(&mut self, rx_from_core: AsyncReceiver<Vec<Msg>>, core_pipe_read_id_for_incoming_routing: usize) {
if self.state.is_attached {
return;
}
self.state.rx_from_core = Some(rx_from_core);
self.state.core_pipe_read_id_for_incoming_routing = Some(core_pipe_read_id_for_incoming_routing);
self.state.is_attached = true;
}
pub(crate) fn is_attached(&self) -> bool {
self.state.is_attached
}
pub(crate) async fn recv_from_core(&self) -> Result<Vec<Msg>, RecvError> {
if let Some(ref rx) = self.state.rx_from_core {
rx.recv().await
} else {
Err(RecvError::Disconnected) }
}
pub(crate) fn detach_and_clear_pipes(&mut self) {
let _ = self.state.rx_from_core.take();
self.state.core_pipe_read_id_for_incoming_routing = None;
self.state.is_attached = false;
}
#[cfg(test)]
pub(crate) fn rx_from_core_is_some(&self) -> bool {
self.state.rx_from_core.is_some()
}
}