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
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)
|
|
}
|
|
} |