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