use core::fmt::Debug;
use core::hash::Hash;
use alloc::format;
use iceoryx2_bb_elementary_traits::zero_copy_send::ZeroCopySend;
use iceoryx2_log::fail;
use super::blackboard::PortFactory;
use crate::port::reader::{Reader, ReaderCreateError};
use crate::service;
#[derive(Debug, Clone)]
pub struct PortFactoryReader<
'factory,
Service: service::Service,
KeyType: Send + Sync + Eq + Clone + Copy + Debug + 'static + Hash + ZeroCopySend,
> {
pub(crate) factory: &'factory PortFactory<Service, KeyType>,
}
impl<
'factory,
Service: service::Service,
KeyType: Send + Sync + Eq + Clone + Copy + Debug + 'static + Hash + ZeroCopySend,
> PortFactoryReader<'factory, Service, KeyType>
{
pub(crate) fn new(factory: &'factory PortFactory<Service, KeyType>) -> Self {
Self { factory }
}
pub fn create(self) -> Result<Reader<Service, KeyType>, ReaderCreateError> {
let origin = format!("{self:?}");
Ok(
fail!(from origin, when Reader::new(self.factory.service.clone()),"Failed to create new Reader port."),
)
}
}