pub mod range;
pub mod uniform;
pub use range::RangeAssignor;
pub use uniform::UniformAssignor;
use std::collections::HashMap;
use crabka_protocol::primitives::uuid::Uuid;
#[derive(Debug, Clone)]
pub struct MemberSubscription {
pub member_id: String,
pub rack_id: Option<String>,
pub subscribed_topic_ids: Vec<Uuid>,
}
#[derive(Debug, Clone, Default)]
pub struct TopicMetadata {
pub partitions_per_topic: HashMap<Uuid, i32>,
pub partition_racks: HashMap<(Uuid, i32), Vec<String>>,
}
pub type Assignment = HashMap<String, HashMap<Uuid, Vec<i32>>>;
pub trait Assignor: Send + Sync + std::fmt::Debug {
fn name(&self) -> &'static str;
fn assign(&self, members: &[MemberSubscription], topics: &TopicMetadata) -> Assignment;
}