/RxArrow

RxJava extensions for Arrow's Data Types

Primary LanguageKotlinApache License 2.0Apache-2.0

RxArrow

RxArrow is a collection of RxJava extensions and typealiases Arrow's Data Types.

Table of Contents

Why Z

I use Z as a postfix for all typealiases because I was influenced by ZIO.

Usage

Observable<Either<E, A>> aka ObservableZ<E, A>

ObservableZ<E, A> is a type alias for Observable<Either<E, A>>. It has a convenient extension functions to make life easier when working with Observable<Either<E, A>>.

Observable.just("error".left(), 23.right()) // Left(error), Right(24): ObservableZ<String, Int>
    .mapZ { it + 2 } // Left("error"), Right(25): ObservableZ<String, Int>
    .mapLeft { it.reversed() } // Left("rorre"), Right(25): ObservableZ<String, Int>
    .mapLeft { SomethingWentWrong } // Left(SomethingWentWrong), Right(25): ObservableZ<SomethingWentWrong, Int>
    .flatMapZ { Observable.just(it * it) } // Left(SomethingWentWrong), Right(625): ObservableZ<SomethingWentWrong, Int>
    .flatMapSingleEither { divide(it, 0) } // Left(SomethingWentWrong), Left(DevidedByZero): ObservableZ<Error, Int>
    .subscribe { either -> println("$either") }

Single<Either<E, A>> aka SingleZ<E, A>

Similar to ObservableZ

Maybe<Either<E, A>> aka MaybeZ<E, A>

Similar to ObservableZ

Setup

You can get RxArrow by using Jitpack.

    repositories {
        jcenter()
        maven { url 'https://jitpack.io' }
    }

    implementation "io.arrow-kt:arrow-core:$arrow_version"
    implementation "com.github.lenguyenthanh:RxArrow:$rxarrow"

Compatibility

Supports RxJava3 and Arrow version 0.10.5.

Contributing

Any bug reports, feature requests, questions and pull requests are very welcome.