mirego / trikot.streams

Reactive Streams for Kotlin Multiplatform with mutability checks

Home Page:https://open.mirego.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

⚠️ Warning: this project as been moved

See the new trikot repository for releases starting from 3.0.0.

Trikot.streams

Elegant implementation of ReactiveStreams for Kotlin Multiplatform.

  • Manage object immutability in native implementation (Object are frozen when switching threads)
  • Multithread support with ObserveOn and SubscribeOn processors
  • Simplify the management of publishers subscriptions and unsubscriptions
  • Help you focus on what you need to do by hiding Multiplatform complexity

Sample

Common code

class SearchController() {
    private val searchKeywordPublisher = Publishers.behaviorSubject<String>("keyword")
    private val searchResultsPublisher = searchKeywordPublisher.switchMap { keyword ->
        searchService.search(keyword)
    }.shared()
    val searchResultCount = searchResultsPublisher.switchMap { results ->
        PublisherFactory.create(results.count).toString()
    }
    val resultUppercaseTitles = searchResultsPublisher.map { it.title.toUpperCase() }
    val searchResultCountLabel = searchResultsPublisher.map { "${it.results.count()} results" }
    fun searchFor(keyword: String) {
       searchKeywordPublisher.value = keyword 
    }
}

Swift

See swift extensions for more information.

Helps connect a publisher to a variable in a reactive environment.

let label = UILabel()
label.bind(searchController.searchResultCountLabel, \UILabel.text)

Android

See android-ktx for more information.

Binding helpers relies on AndroidViewModel and uses lifecycleOwner to manage subscription and unsubscription.

val searchResultLiveData = searchController.searchResultCountLabel.asLiveData()

Publishers and Processors

Foundation of trikot.streams is based on a immutable and concurrent implementation of Reactive-Streams.

Cancellables

Subscription and unsubscription are managed trough Cancellable and CancellableManager.

Installation

Import dependencies
    maven { url('https://s3.amazonaws.com/mirego-maven/public') }

    api "com.mirego.trikot:streams:$trikot_streams_version"
    jvm "com.mirego.trikot:streams-jvm:$trikot_streams_version"
    js "com.mirego.trikot:streams-js:$trikot_streams_version"
    iosx64 "com.mirego.trikot:streams-iosx64:$trikot_streams_version"
    iosarm64 "com.mirego.trikot:streams-iosarm64:$trikot_streams_version"

License

Trikot.streams is © 2018-2019 Mirego and may be freely distributed under the New BSD license. See the LICENSE.md file.

About Mirego

Mirego is a team of passionate people who believe that work is a place where you can innovate and have fun. We’re a team of talented people who imagine and build beautiful Web and mobile applications. We come together to share ideas and change the world.

We also love open-source software and we try to give back to the community as much as we can.

About

Reactive Streams for Kotlin Multiplatform with mutability checks

https://open.mirego.com

License:BSD 3-Clause "New" or "Revised" License


Languages

Language:Kotlin 96.8%Language:Swift 2.3%Language:Groovy 0.4%Language:Ruby 0.4%