use crate::ids::{
CanisterRole, ComponentGroupDeploymentId, ComponentGroupMemberPath, ComponentSpecId,
FleetServiceId,
};
use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
pub struct ServicesConfig {
#[serde(default)]
pub fleet: FleetServicesConfig,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
pub struct FleetServicesConfig {
#[serde(default)]
pub targets: BTreeMap<FleetServiceId, FleetServiceTargetConfig>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(tag = "mode", deny_unknown_fields)]
pub enum FleetServiceTargetConfig {
#[serde(rename = "authority_replica")]
AuthorityReplica {
role: CanisterRole,
component_spec: ComponentSpecId,
authority_deployment: ComponentGroupDeploymentId,
authority_member: ComponentGroupMemberPath,
placement: FleetServicePlacementPolicyConfig,
},
#[serde(rename = "active_pool")]
ActivePool {
role: CanisterRole,
component_spec: ComponentSpecId,
placement: FleetServicePlacementPolicyConfig,
},
}
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
pub struct FleetServicePlacementPolicyConfig {
pub maximum_members_per_root: u32,
pub minimum_distinct_roots: u32,
}