use crate::clients::client::IggyClient;
use crate::clients::producer::IggyProducer;
use crate::prelude::{IggyError, SystemClient};
use crate::stream_builder::{IggyProducerConfig, build};
use tracing::trace;
#[derive(Debug, Default, Clone, Eq, PartialEq)]
pub struct IggyStreamProducer;
impl IggyStreamProducer {
pub async fn build(
client: &IggyClient,
config: &IggyProducerConfig,
) -> Result<IggyProducer, IggyError> {
trace!("Check if client is connected");
if client.ping().await.is_err() {
return Err(IggyError::NotConnected);
}
trace!("Build iggy producer");
let iggy_producer = build::build_iggy_producer(client, config).await?;
Ok(iggy_producer)
}
pub async fn with_client_from_url(
connection_string: &str,
config: &IggyProducerConfig,
) -> Result<(IggyClient, IggyProducer), IggyError> {
trace!("Build and connect iggy client");
let client = build::build_iggy_client::build_iggy_client(connection_string).await?;
trace!("Build iggy producer");
let iggy_producer = build::build_iggy_producer(&client, config).await?;
Ok((client, iggy_producer))
}
pub async fn build_iggy_client(connection_string: &str) -> Result<IggyClient, IggyError> {
trace!("Build and connect iggy client");
let client = build::build_iggy_client(connection_string).await?;
Ok(client)
}
}