Robert Jaros
01/06/2023, 1:17 PMRobert Jaros
01/06/2023, 1:29 PMobject RaportContract {
data class State(
// ...
)
sealed class Inputs {
sealed class KolumnyInputs : Inputs() {
// first group of inputs
}
sealed class WarunkiInputs : Inputs() {
// second group of inputs
}
}
sealed class Events
}
// RaportInputHandler.kt
class RaportInputHandler() :
InputHandler<RaportContract.Inputs, RaportContract.Events, RaportContract.State> {
override suspend fun InputHandlerScope<RaportContract.Inputs, RaportContract.Events, RaportContract.State>.handleInput(
input: RaportContract.Inputs
) = when (input) {
is KolumnyInputs -> {
raportKolumnyHandleInput(input)
}
is WarunkiInputs -> {
raportWarunkiHandleInput(input)
}
}
}
// RaportKolumnyHandle.kt
suspend fun InputHandlerScope<RaportContract.Inputs, RaportContract.Events, RaportContract.State>.raportKolumnyHandleInput(
input: RaportContract.Inputs.KolumnyInputs
): Unit = when (input) {
// handle first group
}
// RaportWarunkiHandle.kt
suspend fun InputHandlerScope<RaportContract.Inputs, RaportContract.Events, RaportContract.State>.raportWarunkiHandleInput(
input: RaportContract.Inputs.WarunkiInputs): Unit = when (input) {
// handle second group
}
Robert Jaros
01/06/2023, 1:30 PMCasey Brooks
01/06/2023, 4:35 PM// RaportContract.kt
typealias RaportInputScope = InputHandlerScope<RaportContract.Inputs, RaportContract.Events, RaportContract.State>
object RaportContract {
data class State(
// ...
)
abstract class Inputs {
abstract fun RaportInputScope.handle()
}
sealed class Events
}
// each in their own files
class KolumnyInputs1 : Inputs() {
override fun RaportInputScope.handle() {
}
}
class KolumnyInputs2 : Inputs() {
override fun RaportInputScope.handle() {
}
}
class WarunkiInputs1 : Inputs() {
override fun RaportInputScope.handle() {
}
}
class WarunkiInputs2 : Inputs() {
override fun RaportInputScope.handle() {
}
}
// RaportInputHandler.kt
class RaportInputHandler() : InputHandler<RaportContract.Inputs, RaportContract.Events, RaportContract.State> {
override suspend fun RaportInputScope.handleInput(
input: RaportContract.Inputs
) = with(input) {
handle()
}
}