spacegate_config/service/redis/
update.rs

1use super::{Redis, RedisConfEvent, CONF_EVENT_CHANNEL, CONF_GATEWAY_KEY, CONF_HTTP_ROUTE_KEY, CONF_PLUGIN_KEY};
2use crate::{
3    service::{config_format::ConfigFormat, Update},
4    BoxResult,
5};
6use redis::AsyncCommands as _;
7
8impl<F> Update for Redis<F>
9where
10    F: ConfigFormat + Send + Sync,
11{
12    async fn update_config_item_gateway(&self, gateway_name: &str, gateway: crate::model::SgGateway) -> BoxResult<()> {
13        let _: () = self.get_con().await?.hset(CONF_GATEWAY_KEY, gateway_name, self.format.ser(&gateway)?).await?;
14        let event = RedisConfEvent(
15            crate::service::ConfigType::Gateway { name: gateway_name.to_string() },
16            crate::service::ConfigEventType::Update,
17        );
18        let _: () = self.get_con().await?.publish(CONF_EVENT_CHANNEL, event).await?;
19        Ok(())
20    }
21
22    async fn update_config_item_route(&self, gateway_name: &str, route_name: &str, route: crate::model::SgHttpRoute) -> BoxResult<()> {
23        let _: () = self.get_con().await?.hset(format!("{}{}", CONF_HTTP_ROUTE_KEY, gateway_name), route_name, self.format.ser(&route)?).await?;
24        let event = RedisConfEvent(
25            crate::service::ConfigType::Route {
26                gateway_name: gateway_name.to_string(),
27                name: route_name.to_string(),
28            },
29            crate::service::ConfigEventType::Update,
30        );
31        let _: () = self.get_con().await?.publish(CONF_EVENT_CHANNEL, event).await?;
32        Ok(())
33    }
34
35    async fn update_plugin(&self, id: &crate::model::PluginInstanceId, value: serde_json::Value) -> BoxResult<()> {
36        let _: () = self.get_con().await?.hset(CONF_PLUGIN_KEY, id.to_string(), value.to_string()).await?;
37        let event = RedisConfEvent(crate::service::ConfigType::Plugin { id: id.clone() }, crate::service::ConfigEventType::Update);
38        let _: () = self.get_con().await?.publish(CONF_EVENT_CHANNEL, event).await?;
39        Ok(())
40    }
41}