bismarck

Caching for Kotlin Multiplatform

License

License

Categories

Categories

Net
GroupId

GroupId

net.sarazan
ArtifactId

ArtifactId

bismarck-iosx64
Last Version

Last Version

0.3.2
Release Date

Release Date

Type

Type

klib
Description

Description

bismarck
Caching for Kotlin Multiplatform
Project URL

Project URL

https://github.com/asarazan/bismarck
Source Code Management

Source Code Management

https://github.com/asarazan/bismarck

Download bismarck-iosx64

Dependencies

compile (7)

Group / Artifact Type Version
co.touchlab : stately-common-iosx64 jar 1.1.0
co.touchlab : stately-concurrency-iosx64 jar 1.1.0
co.touchlab : stately-isolate-iosx64 jar 1.1.0-a1
co.touchlab : stately-iso-collections-iosx64 jar 1.1.0-a1
org.jetbrains.kotlinx : kotlinx-datetime-iosx64 jar 0.1.0
org.jetbrains.kotlinx : kotlinx-coroutines-core-iosx64 jar 1.3.9-native-mt-2
org.jetbrains.kotlin : kotlin-stdlib-common jar 1.4.10

Project Modules

There are no modules declared in this project.

Bismarck (it syncs)

A new caching/syncing library for Kotlin Multiplatform

Under heavy construction. Better examples and instructions coming soon.

val cache = Bismarck.create<UserRecords> {
    fileStorage { 
        path = "users.json"
        serializer = JsonSerializer(UserRecords.serializer()) // requires bismarck-serializer-kotlinx
    }
    freshness { 
        path = "users-freshness" // freshness state will survive shutdowns if you specify a path
        millis = 15 * 60 * 1000 // data is considered fresh for 15 minutes
    }
    fetcher {
        myApi.fetchAndProcessHundredsOfRecords()
    }
}

// Kick off a fetch with either check() or invalidate()
cache.check()

// Bismarck is coroutine-driven, 
// so async and observations should be scoped.
someScope.launch {

    // This will be called whenever the data is updated, as long as the scope continues.
    cache.eachValue {
        println("Received value ${it.bar}")
    }
    
    // It's helpful to know what your cache is doing. Observe state to find out!
    cache.eachState {
        spinner.isVisible = it == Bismarck.State.Fetching
    }
    
    // Same for error states!
    cache.eachError {
        warningIcon.isVisible = it != null
    }
}

// You can also grab all of these values directly
val current = cache.value

Installation

repositories {
    maven { url  "https://dl.bintray.com/asarazan/maven" }
}
//...
sourceSets {
    commonMain {
        dependencies {
            implementation "net.sarazan:bismarck:$bismarck_version" // currently 0.0.6
        }
    }
}

Versions

Version
0.3.2
0.3.1
0.3.0
0.1.0