mod dynamic_strategy;
mod hybrid_strategy;
mod static_strategy;
pub use dynamic_strategy::{DynamicHierarchyStrategy, ElectionConfig, ElectionWeights};
pub use hybrid_strategy::HybridHierarchyStrategy;
pub use static_strategy::StaticHierarchyStrategy;
use crate::beacon::{GeographicBeacon, HierarchyLevel, NodeProfile};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum NodeRole {
Leader,
Member,
#[default]
Standalone,
}
pub trait HierarchyStrategy: Send + Sync + std::fmt::Debug {
fn determine_level(&self, node_profile: &NodeProfile) -> HierarchyLevel;
fn determine_role(
&self,
node_profile: &NodeProfile,
nearby_peers: &[GeographicBeacon],
) -> NodeRole;
fn can_transition(&self, current_level: HierarchyLevel, new_level: HierarchyLevel) -> bool;
}