sealed class Event<out T>
object Complete : Event<Nothing>
data class Error : Event<Nothing>
data class Item<T> : Event<T>