package me.eater.hefbrug.definition import me.eater.hefbrug.collector.AbstractCollector import me.eater.hefbrug.dsl.context.DefinitionContextSkeleton import me.eater.hefbrug.dsl.context.extension_util.FactoryRegister import me.eater.hefbrug.enforcer.AbstractEnforcer import me.eater.hefbrug.executor.ExecutionContext import me.eater.hefbrug.state.AbstractState abstract class DefinitionFactory, D : DefinitionSkeleton>( val id: String, val builder: (String) -> D ) { fun build(id: String): D = builder(id) open fun key(id: String): DefinitionKey = DefinitionKey(this.id, id) abstract fun createCollector(context: ExecutionContext): AbstractCollector abstract fun createEnforcer(context: ExecutionContext): AbstractEnforcer init { FactoryRegister += this } }