arminius_lib_nats/client/
maintenance.rs1use async_nats::jetstream;
10
11use crate::{NatsClient, NatsError};
12
13impl NatsClient {
14 const MAINTENANCE_MODE_KEY: &str = "maintenance_mode";
19
20 pub async fn set_maintenance_mode(&self, maintenance_mode: bool) -> Result<(), NatsError> {
22 let jetstream = jetstream::new(self.client.clone());
23 let store = Self::connect_to_store(&jetstream).await?;
24 store.put(Self::MAINTENANCE_MODE_KEY, vec![u8::from(maintenance_mode)].into()).await?;
25 Ok(())
26 }
27
28 pub async fn is_in_maintenance_mode(&self) -> Result<bool, NatsError> {
30 let jetstream = jetstream::new(self.client.clone());
31 let store = Self::connect_to_store(&jetstream).await?;
32 Ok(store
33 .entry(Self::MAINTENANCE_MODE_KEY)
34 .await?
35 .is_none_or(|entry| entry.value.first().unwrap_or(&1) == &1))
36 }
37
38 pub async fn wait_for_maintenance_mode(&self, status: bool) -> Result<(), NatsError> {
40 let jetstream = jetstream::new(self.client.clone());
41 let store = Self::connect_to_store(&jetstream).await?;
42 while self.is_in_maintenance_mode().await? != status {
43 store.watch(Self::MAINTENANCE_MODE_KEY).await?;
44 }
45 Ok(())
46 }
47}
48
49#[cfg(test)]
50mod tests;