spacegate_config/service/fs/
retrieve.rs1use spacegate_model::{PluginConfig, PluginInstanceId};
2
3use super::Fs;
4use crate::service::config_format::ConfigFormat;
5use crate::BoxError;
6use crate::{model::gateway::SgGateway, model::http_route::SgHttpRoute};
7
8use crate::service::Retrieve;
9
10impl<F> Retrieve for Fs<F>
11where
12 F: ConfigFormat + Send + Sync,
13{
14 async fn retrieve_all_plugins(&self) -> Result<Vec<PluginConfig>, BoxError> {
15 self.retrieve_cached(|cfg| cfg.plugins.clone().into_config_vec()).await
16 }
17
18 async fn retrieve_plugin(&self, id: &PluginInstanceId) -> Result<Option<PluginConfig>, BoxError> {
19 self.retrieve_cached(|cfg| cfg.plugins.get(id).cloned().map(|spec| PluginConfig { spec, id: id.clone() })).await
20 }
21
22 async fn retrieve_config_item_gateway(&self, gateway_name: &str) -> Result<Option<SgGateway>, BoxError> {
23 self.retrieve_cached(|cfg| cfg.gateways.get(gateway_name).map(|item| item.gateway.clone())).await
24 }
25
26 async fn retrieve_config_item_route(&self, gateway_name: &str, route_name: &str) -> Result<Option<SgHttpRoute>, BoxError> {
27 self.retrieve_cached(|cfg| cfg.gateways.get(gateway_name).and_then(|item| item.routes.get(route_name)).cloned()).await
28 }
29
30 async fn retrieve_config_item_route_names(&self, name: &str) -> Result<Vec<String>, BoxError> {
31 self.retrieve_cached(|cfg| cfg.gateways.get(name).map(|item| item.routes.keys().cloned().collect()).unwrap_or_default()).await
32 }
33
34 async fn retrieve_config_names(&self) -> Result<Vec<String>, BoxError> {
35 self.retrieve_cached(|cfg| cfg.gateways.keys().cloned().collect()).await
36 }
37
38 async fn retrieve_config(&self) -> Result<spacegate_model::Config, BoxError> {
39 self.retrieve_cached(Clone::clone).await
40 }
41
42 async fn retrieve_plugins_by_code(&self, code: &str) -> Result<Vec<PluginConfig>, BoxError> {
43 self.retrieve_cached(|cfg| {
44 cfg.plugins
45 .iter()
46 .filter_map(|(id, spec)| {
47 (id.code == code).then_some(PluginConfig {
48 spec: spec.clone(),
49 id: id.clone(),
50 })
51 })
52 .collect()
53 })
54 .await
55 }
56}