From bd31dc85f8e9cb01c1e1a4e49fd4735d24a6da04 Mon Sep 17 00:00:00 2001 From: rtkay123 Date: Sun, 10 Aug 2025 12:55:43 +0200 Subject: chore: collapse stack-up --- lib/warden-stack/src/nats.rs | 61 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 lib/warden-stack/src/nats.rs (limited to 'lib/warden-stack/src/nats.rs') diff --git a/lib/warden-stack/src/nats.rs b/lib/warden-stack/src/nats.rs new file mode 100644 index 0000000..952490c --- /dev/null +++ b/lib/warden-stack/src/nats.rs @@ -0,0 +1,61 @@ +use std::sync::Arc; + +use serde::Deserialize; + +#[derive(Deserialize, Clone, Debug)] +/// Nats configuration +pub struct NatsConfig { + /// Hosts dsn + #[serde(default = "nats")] + pub hosts: Arc<[String]>, +} + +pub(crate) fn nats() -> Arc<[String]> { + let hosts = vec!["nats://localhost:4222".to_string()]; + hosts.into() +} + +impl NatsConfig { + fn hosts(&self) -> Vec { + self.hosts.iter().map(ToString::to_string).collect() + } +} + +use crate::{ + ServiceError, ServicesBuilder, + services_builder::{IsUnset, State}, +}; + +#[cfg(feature = "nats-jetstream")] +impl ServicesBuilder { + /// create a Jetstream Context using the provided [NatsConfig] + pub async fn nats_jetstream( + self, + config: &NatsConfig, + ) -> Result>, ServiceError> + where + S::Jetstream: IsUnset, + { + let hosts = config.hosts(); + let client = async_nats::connect(hosts).await?; + + Ok(self.jetstream_internal(async_nats::jetstream::new(client))) + } +} + +#[cfg(feature = "nats-core")] +impl ServicesBuilder { + /// create a NATS connection using the provided [NatsConfig] + pub async fn nats( + self, + config: &NatsConfig, + ) -> Result>, ServiceError> + where + S::Nats: IsUnset, + { + let hosts = config.hosts(); + let client = async_nats::connect(hosts).await?; + + Ok(self.nats_internal(client)) + } +} -- cgit v1.2.3