use enum for comparison in NumericMessage.toServerMessage()

This commit is contained in:
2026-09-14 00:16:47 +01:00
parent 48615181f3
commit 8953c096c1
@@ -64,18 +64,31 @@ class MessageParser(val incoming: Channel<String>) {
}
class NumericCommand(override val command: String, override val parameters: List<String>) : Command(command, parameters) {
private enum class RPL(val underlying: Int) {
ISUPPORT(5),
LISTSTART(321),
LIST(322),
LISTEND(323),
NONE(0xbeef), ;
companion object {
val rplMap = RPL.entries.associateBy { it.underlying }
infix fun from(value: Int) = rplMap[value] ?: NONE
infix fun from(value: String) = from(value.toInt())
}
}
override fun toServerMessage() =
when (command.toInt()) {
5 -> ServerMessage.Numeric.RPL_ISUPPORT(getNonTrailingParameterString())
321 -> ServerMessage.Numeric.RPL_LISTSTART()
322 ->
ServerMessage.Numeric.RPL_LIST(
parameters[1],
parameters[2].toInt(),
getTrailingParameterString(),
)
323 -> ServerMessage.Numeric.RPL_LISTEND()
else -> ServerMessage.UNIMPLEMENTED(parameters.toString())
when (RPL from command) {
RPL.ISUPPORT -> ServerMessage.Numeric.RPL_ISUPPORT(getNonTrailingParameterString())
RPL.LISTSTART -> ServerMessage.Numeric.RPL_LISTSTART()
RPL.LIST -> ServerMessage.Numeric.RPL_LIST(
parameters[1],
parameters[2].toInt(),
getTrailingParameterString(),
)
RPL.LISTEND -> ServerMessage.Numeric.RPL_LISTEND()
RPL.NONE -> ServerMessage.UNIMPLEMENTED(parameters.toString())
}
}
}