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::writer::{Writer, WriterCreateError};
use crate::service;
#[derive(Debug, Clone)]
pub struct PortFactoryWriter<
'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,
> PortFactoryWriter<'factory, Service, KeyType>
{
pub(crate) fn new(factory: &'factory PortFactory<Service, KeyType>) -> Self {
Self { factory }
}
pub fn create(self) -> Result<Writer<Service, KeyType>, WriterCreateError> {
let origin = format!("{self:?}");
Ok(
fail!(from origin, when Writer::new(self.factory.service.clone()),"Failed to create new Writer port."),
)
}
}