use crate::publisher::publisher::PublisherBuilder;
#[derive(Clone, Debug)]
pub struct PublisherFactory {
pub(crate) inner: crate::generated::gapic_dataplane::client::Publisher,
}
pub type PublisherFactoryBuilder =
gax::client_builder::ClientBuilder<client_builder::Factory, gaxi::options::Credentials>;
pub(crate) mod client_builder {
use super::PublisherFactory;
pub struct Factory;
impl gax::client_builder::internal::ClientFactory for Factory {
type Client = PublisherFactory;
type Credentials = gaxi::options::Credentials;
#[allow(unused_mut)]
async fn build(
self,
mut config: gaxi::options::ClientConfig,
) -> gax::client_builder::Result<Self::Client> {
Self::Client::new(config).await
}
}
}
impl PublisherFactory {
pub fn builder() -> PublisherFactoryBuilder {
gax::client_builder::internal::new_builder(client_builder::Factory)
}
pub(crate) async fn new(
config: gaxi::options::ClientConfig,
) -> Result<Self, gax::client_builder::Error> {
let inner = crate::generated::gapic_dataplane::client::Publisher::new(config).await?;
std::result::Result::Ok(Self { inner })
}
pub fn publisher<T>(&self, topic: T) -> PublisherBuilder
where
T: Into<String>,
{
PublisherBuilder::new(self.inner.clone(), topic.into())
}
}
#[cfg(test)]
mod tests {
use super::PublisherFactory;
#[tokio::test]
async fn builder() -> anyhow::Result<()> {
let client = PublisherFactory::builder()
.with_credentials(auth::credentials::anonymous::Builder::new().build())
.build()
.await?;
let _ = client.publisher("projects/my-project/topics/my-topic".to_string());
Ok(())
}
}