use crate::{
config::{
ComponentDeploymentLabelKey, ComponentDeploymentLabelValue, FleetServiceMemberPurpose,
},
ids::{ComponentGroupMemberId, ComponentGroupSpecId, ComponentSpecId, FleetServiceId},
};
use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
pub struct ComponentGroupSpecConfig {
#[serde(default)]
pub components: BTreeMap<ComponentGroupMemberId, ComponentGroupComponentConfig>,
#[serde(default)]
pub groups: BTreeMap<ComponentGroupMemberId, ComponentGroupIncludeConfig>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
pub struct ComponentGroupComponentConfig {
pub component_spec: ComponentSpecId,
pub service: Option<FleetServiceId>,
pub service_purpose: Option<FleetServiceMemberPurpose>,
#[serde(default)]
pub labels: BTreeMap<ComponentDeploymentLabelKey, ComponentDeploymentLabelValue>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
pub struct ComponentGroupIncludeConfig {
pub component_group: ComponentGroupSpecId,
pub service_purpose: Option<FleetServiceMemberPurpose>,
#[serde(default)]
pub labels: BTreeMap<ComponentDeploymentLabelKey, ComponentDeploymentLabelValue>,
}