diff --git a/src/main/kotlin/com/shr4pnel/ferretirc/net/MessageParser.kt b/src/main/kotlin/com/shr4pnel/ferretirc/net/MessageParser.kt index cd46c00..6d05fb0 100644 --- a/src/main/kotlin/com/shr4pnel/ferretirc/net/MessageParser.kt +++ b/src/main/kotlin/com/shr4pnel/ferretirc/net/MessageParser.kt @@ -64,18 +64,31 @@ class MessageParser(val incoming: Channel) { } class NumericCommand(override val command: String, override val parameters: List) : 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()) } } }