use systemprompt_manifest::profile::NodeRole;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum RouteGroup {
Oauth,
Agent,
McpAndStream,
ContentAndMisc,
Messaging,
Extensions,
Discovery,
AuthenticatedDiscovery,
WellKnown,
Managed,
Gateway,
Static,
}
const ALL_GROUPS: &[RouteGroup] = &[
RouteGroup::Oauth,
RouteGroup::Agent,
RouteGroup::McpAndStream,
RouteGroup::ContentAndMisc,
RouteGroup::Messaging,
RouteGroup::Extensions,
RouteGroup::Discovery,
RouteGroup::AuthenticatedDiscovery,
RouteGroup::WellKnown,
RouteGroup::Managed,
RouteGroup::Gateway,
RouteGroup::Static,
];
const GATEWAY_GROUPS: &[RouteGroup] = &[
RouteGroup::Oauth,
RouteGroup::Discovery,
RouteGroup::AuthenticatedDiscovery,
RouteGroup::WellKnown,
RouteGroup::Managed,
RouteGroup::Gateway,
];
const ADMIN_GROUPS: &[RouteGroup] = &[
RouteGroup::Oauth,
RouteGroup::Agent,
RouteGroup::McpAndStream,
RouteGroup::ContentAndMisc,
RouteGroup::Messaging,
RouteGroup::Extensions,
RouteGroup::Discovery,
RouteGroup::AuthenticatedDiscovery,
RouteGroup::WellKnown,
RouteGroup::Static,
];
pub const fn route_groups(role: NodeRole) -> &'static [RouteGroup] {
match role {
NodeRole::All => ALL_GROUPS,
NodeRole::Gateway => GATEWAY_GROUPS,
NodeRole::Admin => ADMIN_GROUPS,
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct LifecyclePlan {
pub reconcile_mcp: bool,
pub reconcile_agents: bool,
pub scheduler: bool,
}
pub const fn lifecycle_plan(role: NodeRole) -> LifecyclePlan {
let workers = role.runs_workers();
LifecyclePlan {
reconcile_mcp: workers,
reconcile_agents: workers,
scheduler: workers,
}
}