KUnion
A Kotlin Multiplatform library that provides a type-safe union type implementation with serialization support.
Features
- Type-safe union types for Kotlin Multiplatform
- Support for up to 23 different types in a single union
- Serialization support via kotlinx.serialization
- Pattern matching-like behavior with
consume functions
- Safe and unsafe union creation
- Cross-platform support (JVM, JS, Native, Wasm)
Installation
Gradle (Kotlin DSL)
repositories {
mavenCentral()
}
dependencies {
implementation("io.github.stream29:kunion:0.0.3")
}
Gradle (Groovy)
repositories {
mavenCentral()
}
dependencies {
implementation 'io.github.stream29:kunion:0.0.3'
}
Maven
<dependency>
<groupId>io.github.stream29</groupId>
<artifactId>kunion</artifactId>
<version>0.0.3</version>
</dependency>
Usage
Creating a Union
You can create a union using the SafeUnion or UnsafeUnion functions:
val stringOrInt: Union2<String, Int> = SafeUnion2<String, Int>("Hello")
val intOrString: Union2<Int, String> = SafeUnion2<Int, String>(42)
val unsafeUnion: Union2<String, Int> = UnsafeUnion("Hello")
Consuming a Union
You can consume a union using the consume functions:
val union: Union2<String, Int> = SafeUnion2<String, Int>("Hello")
union
.consume0 { str -> println("String: $str") }
.consume1 { int -> println("Int: $int") }
Serialization
KUnion supports serialization via kotlinx.serialization:
val union: Union2<String, Int> = SafeUnion2<String, Int>("Hello")
val json = Json.encodeToString(union)
val deserialized = Json.decodeFromString<Union2<String, Int>>(json)
Examples
Basic Example
fun processValue(value: Union2<String, Int>) {
value
.consume0 { str -> println() }
.consume1 { int -> println() }
}
{
stringValue = SafeUnion2<String, >()
intValue = SafeUnion2<String, >()
processValue(stringValue)
processValue(intValue)
}
Complex Example with Multiple Types
License
KUnion is licensed under the Apache License Version 2.0. See the LICENSE file for details.
Links