Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
Change Log
==========

1.8.0
-----

### Added

- Coroutines
- `OngoingFlow` construct for flows that do not end, along with applicable
transformation operators.

1.7.0
-----

Expand Down
56 changes: 56 additions & 0 deletions coroutines/api/coroutines.api
Original file line number Diff line number Diff line change
Expand Up @@ -76,3 +76,59 @@ public final class com/inkapplications/coroutines/RetryStrategy$Static : com/ink
public fun toString ()Ljava/lang/String;
}

public final class com/inkapplications/coroutines/ongoing/CollectorsKt {
public static final fun collect (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static final fun collectLatest (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
}

public abstract interface class com/inkapplications/coroutines/ongoing/OngoingFlow {
public abstract fun asFlow ()Lkotlinx/coroutines/flow/Flow;
}

public final class com/inkapplications/coroutines/ongoing/TransformationsKt {
public static final fun collectOn (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function2;)Ljava/lang/Void;
public static final fun combine (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lkotlin/jvm/functions/Function5;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun combine (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lkotlin/jvm/functions/Function4;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun combine (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lkotlin/jvm/functions/Function3;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun combine (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lkotlin/jvm/functions/Function2;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun combineApply (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun combineFlatten (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lcom/inkapplications/coroutines/ongoing/OngoingFlow;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun combinePair (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lcom/inkapplications/coroutines/ongoing/OngoingFlow;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun combineTriple (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lcom/inkapplications/coroutines/ongoing/OngoingFlow;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun combineWith (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lkotlin/jvm/functions/Function2;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun distinctUntilChanged (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun drop (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;I)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun dropWhile (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lkotlin/jvm/functions/Function1;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun filter (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lkotlin/jvm/functions/Function1;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun filterItemFailure (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun filterItemNotNull (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun filterItemSuccess (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun filterItems (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lkotlin/jvm/functions/Function2;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun filterNotNull (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun first (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static final fun flatMapConcat (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lkotlin/jvm/functions/Function1;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun flatMapLatest (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lkotlin/jvm/functions/Function2;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun map (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lkotlin/jvm/functions/Function2;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun mapItems (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lkotlin/jvm/functions/Function2;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun mapItemsCatching (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lkotlin/jvm/functions/Function1;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun mapLatest (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lkotlin/jvm/functions/Function2;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun onEach (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lkotlin/jvm/functions/Function1;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun onItemFailure (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lkotlin/jvm/functions/Function1;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun safeCollect (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static final fun startWith (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Ljava/lang/Object;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun take (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;I)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun unsafeTransform (Lcom/inkapplications/coroutines/ongoing/OngoingFlow;Lkotlin/jvm/functions/Function1;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
}

public final class com/inkapplications/coroutines/ongoing/UnexpectedEndOfFlow : java/lang/IllegalStateException {
public fun <init> ()V
public fun <init> (Ljava/lang/String;)V
public synthetic fun <init> (Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
}

public final class com/inkapplications/coroutines/ongoing/WrappedOngoingFlowKt {
public static final fun asOngoing (Lkotlinx/coroutines/flow/Flow;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun ongoingFlow (Lkotlin/jvm/functions/Function2;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
public static final fun ongoingFlowOf ([Ljava/lang/Object;)Lcom/inkapplications/coroutines/ongoing/OngoingFlow;
}

2 changes: 1 addition & 1 deletion coroutines/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ kotlin {
}
}

val jvmTest by getting {
val commonTest by getting {
dependencies {
implementation(kotlin("test"))
implementation(libs.kotlinx.coroutines.test)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.inkapplications.coroutines.ongoing

import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.collectLatest


/**
* Collects a flow that never returns.
*
* This is identical to [collect], but throws an exception if the flow ends.
*/
suspend inline fun <T> OngoingFlow<T>.collect(
crossinline observer: suspend (T) -> Unit
): Nothing {
asFlow().collect { observer(it) }
throw UnexpectedEndOfFlow()
}

/**
* Collects a flow that never returns.
*
* This is identical to a Flow's [collectLatest], but throws an exception if the flow ends.
*/
suspend inline fun <T> OngoingFlow<T>.collectLatest(
crossinline observer: suspend (T) -> Unit
): Nothing {
asFlow().collectLatest { observer(it) }
throw UnexpectedEndOfFlow()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.inkapplications.coroutines.ongoing

import kotlinx.coroutines.flow.Flow

/**
* An Ongoing flow is like a flow, but is not expected to end.
*
* This wraps a flow, discouraging accidental use of unsafe extensions
* for this type of data stream.
*/
interface OngoingFlow<T>
{
/**
* Convert thee ongoing flow to a standard flow.
*/
fun asFlow(): Flow<T>
}
Loading
Loading