Skip to content

Commit 91a425a

Browse files
committed
Introduce MessageHandler interface
1 parent 9df8bf1 commit 91a425a

File tree

7 files changed

+26
-10
lines changed

7 files changed

+26
-10
lines changed

.java-version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
21
1+
23

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ org.gradle.caching=true
33
kotlin.code.style=official
44

55
groupId=io.github.theunic
6-
version=0.3.0
6+
version=0.4.0

kcommand-core/src/main/kotlin/io/github/theunic/kcommand/core/AbstractMessageBus.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ import kotlin.reflect.KClass
66
abstract class AbstractMessageBus<M : Any, R : Any>(
77
private val middlewares: List<Middleware<M, R>> = listOf(),
88
) : MessageBus<M, R> {
9-
private val subscriptions: MutableMap<KClass<out M>, suspend (M) -> R> = mutableMapOf()
9+
private val subscriptions: MutableMap<KClass<out M>, MessageHandler<M, R>> = mutableMapOf()
1010

1111
override fun subscribe(
1212
messageType: KClass<out M>,
13-
messageHandler: suspend (M) -> R,
13+
messageHandler: MessageHandler<M, R>,
1414
) {
1515
synchronized(subscriptions) {
1616
subscriptions[messageType] = messageHandler
@@ -39,9 +39,9 @@ abstract class AbstractMessageBus<M : Any, R : Any>(
3939
chain(command)
4040
}
4141

42-
private suspend fun handleCommand(command: M): R = getCommandHandler(command::class)(command)
42+
private suspend fun handleCommand(command: M): R = getCommandHandler(command::class).handle(command)
4343

44-
private fun getCommandHandler(commandClass: KClass<out M>): suspend (M) -> R {
44+
private fun getCommandHandler(commandClass: KClass<out M>): MessageHandler<M, R> {
4545
synchronized(subscriptions) {
4646
return subscriptions[commandClass]
4747
?: throw IllegalArgumentException("No handler found for command: $commandClass")

kcommand-core/src/main/kotlin/io/github/theunic/kcommand/core/MessageBus.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ interface MessageBus<M : Any, R> {
88

99
fun subscribe(
1010
messageType: KClass<out M>,
11-
messageHandler: suspend (M) -> R,
11+
messageHandler: MessageHandler<M, R>,
1212
)
1313
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package io.github.theunic.kcommand.core
2+
3+
interface MessageHandler<M, R> {
4+
suspend fun handle(message: M): R
5+
}

kcommand-core/src/test/kotlin/io/github/theunic/kcommand/core/DefaultMessageBusTest.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,10 @@ class DefaultMessageBusTest :
2626
}
2727

2828
given("A message bus with a subscription") {
29-
val messageHandler: suspend (String) -> Int = { it.length }
29+
val messageHandler =
30+
object : MessageHandler<String, Int> {
31+
override suspend fun handle(message: String) = message.length
32+
}
3033
messageBus.subscribe(String::class, messageHandler)
3134

3235
`when`("a message sent to the message bus") {
@@ -51,7 +54,10 @@ class DefaultMessageBusTest :
5154
}
5255

5356
val newMessageBus = DefaultMessageBus(listOf(modifyingMiddleware))
54-
val messageHandler = { command: String -> command }
57+
val messageHandler =
58+
object : MessageHandler<String, String> {
59+
override suspend fun handle(message: String) = message
60+
}
5561
newMessageBus.subscribe(String::class, messageHandler)
5662

5763
`when`("A message goes through middleware") {

kcommand-core/src/test/kotlin/io/github/theunic/kcommand/core/SimpleMessageBusTest.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,12 @@ class SimpleMessageBusTest :
88
given("A Simple Message Bus") {
99
val messageBus = SimpleMessageBus<String, Int>()
1010
`when`("A subscription is done") {
11-
messageBus.subscribe(String::class) { it.length }
11+
messageBus.subscribe(
12+
String::class,
13+
object : MessageHandler<String, Int> {
14+
override suspend fun handle(message: String) = message.length
15+
},
16+
)
1217
and("A message is sent to the bus") {
1318
val message = "Hello, world!"
1419
val result = messageBus.handle(message).await()

0 commit comments

Comments
 (0)