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.

33 lines
1.1 KiB
Kotlin

package me.eater.hefbrug.dsl.context.extension_util
import me.eater.hefbrug.definition.DefinitionFactory
import me.eater.hefbrug.definition.DefinitionKey
import me.eater.hefbrug.definition.DefinitionSkeleton
import me.eater.hefbrug.dsl.context.DefinitionContextSkeleton
import me.eater.hefbrug.dsl.context.TargetedContext
import me.eater.hefbrug.dsl.scope.TargetedScope
import me.eater.hefbrug.state.AbstractState
object DefinitionHelper {
@Suppress("UNCHECKED_CAST")
suspend fun <S : AbstractState, C : DefinitionContextSkeleton<S>, D : DefinitionSkeleton<S, C>, F : DefinitionFactory<S, C, D>> runBlock(
context: TargetedContext,
factory: F,
id: Array<out String>,
block: suspend C.() -> Unit
) {
for (idx in id) {
block(
RuntimeRegister[context.runtimeUUID]
.getScope<TargetedScope>(context)
.getDefinition(idx, factory)
.getContext()
)
}
}
class KeyHelper(private val factory: DefinitionFactory<*, *, *>) {
operator fun get(id: String) = factory.key(id)
}
}