aboutsummaryrefslogtreecommitdiffstats
path: root/lib/warden-stack/src/nats.rs
diff options
context:
space:
mode:
authorrtkay123 <dev@kanjala.com>2025-08-10 12:55:43 +0200
committerrtkay123 <dev@kanjala.com>2025-08-10 12:55:43 +0200
commitbd31dc85f8e9cb01c1e1a4e49fd4735d24a6da04 (patch)
tree50b63525480da0bee2ce713d69f02617c20bee8d /lib/warden-stack/src/nats.rs
parent8deeab3e11f707677609047f5577a256cf28ed63 (diff)
downloadwarden-bd31dc85f8e9cb01c1e1a4e49fd4735d24a6da04.tar.bz2
warden-bd31dc85f8e9cb01c1e1a4e49fd4735d24a6da04.zip
chore: collapse stack-up
Diffstat (limited to 'lib/warden-stack/src/nats.rs')
-rw-r--r--lib/warden-stack/src/nats.rs61
1 files changed, 61 insertions, 0 deletions
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<String> {
+ self.hosts.iter().map(ToString::to_string).collect()
+ }
+}
+
+use crate::{
+ ServiceError, ServicesBuilder,
+ services_builder::{IsUnset, State},
+};
+
+#[cfg(feature = "nats-jetstream")]
+impl<S: State> ServicesBuilder<S> {
+ /// create a Jetstream Context using the provided [NatsConfig]
+ pub async fn nats_jetstream(
+ self,
+ config: &NatsConfig,
+ ) -> Result<ServicesBuilder<crate::services_builder::SetJetstream<S>>, 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<S: State> ServicesBuilder<S> {
+ /// create a NATS connection using the provided [NatsConfig]
+ pub async fn nats(
+ self,
+ config: &NatsConfig,
+ ) -> Result<ServicesBuilder<crate::services_builder::SetNats<S>>, ServiceError>
+ where
+ S::Nats: IsUnset,
+ {
+ let hosts = config.hosts();
+ let client = async_nats::connect(hosts).await?;
+
+ Ok(self.nats_internal(client))
+ }
+}