MessagingPort.kt

  1. package com.hexagontk.messaging

  2. import kotlin.reflect.KClass

  3. // TODO 'unsubscribe' and 'call' (publish and wait response)
  4. interface MessagingPort {
  5.     fun <T : Message> consume(
  6.         type: KClass<T>, address: String, decoder: (Map<String, *>) -> T, consumer: (T) -> Unit
  7.     )

  8.     fun publish(message: Message, address: String)

  9.     fun <T : Message> consume(
  10.         type: KClass<T>, decoder: (Map<String, *>) -> T, consumer: (T) -> Unit
  11.     ) {
  12.         consume(type, type.java.name, decoder, consumer)
  13.     }

  14.     fun publish(message: Message) {
  15.         publish(message, message.javaClass.name)
  16.     }
  17. }