use crate::session::layers::LayerConfig;
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
pub struct LayersConfig {
pub layers: std::collections::HashMap<String, LayerConfig>,
}
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
pub struct RoleLayersConfig {
pub layer_refs: Vec<String>,
}
impl LayersConfig {
pub fn is_default_for_serialization(&self) -> bool {
self.layers.is_empty()
}
pub fn get_all_layers(&self) -> Vec<LayerConfig> {
let mut result = Vec::new();
for (layer_name, layer_config) in &self.layers {
let mut layer = layer_config.clone();
layer.name = layer_name.clone();
result.push(layer);
}
result
}
}
impl RoleLayersConfig {
pub fn is_enabled(&self) -> bool {
!self.layer_refs.is_empty()
}
pub fn get_enabled_layers(
&self,
global_layers: &std::collections::HashMap<String, LayerConfig>,
) -> Vec<LayerConfig> {
if self.layer_refs.is_empty() {
return Vec::new();
}
let mut result = Vec::new();
for layer_name in &self.layer_refs {
if let Some(layer_config) = global_layers.get(layer_name) {
let mut layer = layer_config.clone();
layer.name = layer_name.clone();
result.push(layer);
} else {
crate::log_debug!(
"Layer '{}' referenced by role but not found in global registry",
layer_name
);
}
}
result
}
}