anyone know how to use a sealed class within an rx...
# rx
z
anyone know how to use a sealed class within an rx stream without breaking it via
.flatMap()
? So an operator like
.distinctUntilChanged()
still works?
Copy code
sealed class State {
        object Loading : State()
        data class Loaded(val value: Int) : State()
    }

    @Test fun distinctTest() {
        val relay = PublishRelay.create<State>()
        relay.flatMap {
            fun handle(state: State): Observable<*> = when (state) {
                State.Loading -> Observable.just(state)
                        .distinctUntilChanged()
                        .doOnNext { println("loading") }

                is State.Loaded -> Observable.just(state)
                        .distinctUntilChanged()
                        .doOnNext { println(it.value) }
            }
            handle(it)
        }
                .subscribe()

        relay.accept(State.Loading)
        relay.accept(State.Loaded(1))
        relay.accept(State.Loaded(2))
        relay.accept(State.Loaded(3))
        relay.accept(State.Loaded(3))
        //expected: loading, 1, 2, 3
        //actual: loading, 1, 2, 3, 3
    }