use crate::defaults::{
DefaultFinalizationHandler, DefaultGroupDataProcessor, DefaultGroupLifecycleManager,
DefaultManagerComponents, DefaultReservationAllocator,
};
use crate::ManagerComponents;
pub trait ComponentsBuilder<C: ManagerComponents>: 'static {
type BuilderConfig;
fn build(builder_config: &Self::BuilderConfig) -> (C::RA, C::GLM, C::GDP, C::FH);
}
pub struct DefaultComponentsBuilder;
pub type MinGroupCommitSizeParam = usize;
impl ComponentsBuilder<DefaultManagerComponents> for DefaultComponentsBuilder {
type BuilderConfig = MinGroupCommitSizeParam;
fn build(
builder_config: &Self::BuilderConfig,
) -> (
<DefaultManagerComponents as ManagerComponents>::RA,
<DefaultManagerComponents as ManagerComponents>::GLM,
<DefaultManagerComponents as ManagerComponents>::GDP,
<DefaultManagerComponents as ManagerComponents>::FH,
) {
let min_group_commit_size_param = *builder_config;
let ra = DefaultReservationAllocator::new();
let glm = DefaultGroupLifecycleManager::new(min_group_commit_size_param);
let gdp = DefaultGroupDataProcessor::new();
let fh = DefaultFinalizationHandler::new();
(ra, glm, gdp, fh)
}
}