use std::collections::HashMap;
use anyhow::Context as _;
use tokio::sync::watch::{self, Receiver};
use crate::store::{DefaultStore, StoreManager};
#[async_trait::async_trait]
pub trait ConfigManager: StoreManager {
async fn watch(&self, name: &str) -> anyhow::Result<Receiver<HashMap<String, String>>> {
let config = match self.get(name).await {
Ok(Some(data)) => serde_json::from_slice(&data)
.context("Data corruption error, unable to decode data from store")?,
Ok(None) => return Err(anyhow::anyhow!("Config {} does not exist", name)),
Err(e) => return Err(anyhow::anyhow!("Error fetching config {}: {}", name, e)),
};
Ok(watch::channel(config).1)
}
}
impl ConfigManager for DefaultStore {}