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
4 years ago
|
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)
|
||
|
}
|
||
|
}
|