You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

18 lines
759 B
Kotlin

package me.eater.hefbrug.executor
import me.eater.hefbrug.collector.AbstractCollector
import me.eater.hefbrug.definition.DefinitionWildcard
import me.eater.hefbrug.dsl.context.extension_util.FactoryRegister
import me.eater.hefbrug.state.AbstractState
class StateCollector(val context: ExecutionContext) {
private val collectors = mutableMapOf<String, AbstractCollector<*, *>>()
@Suppress("UNCHECKED_CAST")
suspend fun <S : AbstractState> collect(definition: DefinitionWildcard<S>): S {
val collector = collectors.getOrPut(
definition.key.group,
{ FactoryRegister[definition.key.group].createCollector(context) }) as AbstractCollector<S, DefinitionWildcard<S>>
return collector.collect(definition)
}
}