|
| 1 | +@file:Suppress("FunctionName") |
| 2 | + |
1 | 3 | package app.meetacy.vm.flow |
2 | 4 |
|
3 | 5 | import kotlinx.coroutines.CoroutineScope |
4 | 6 | import kotlinx.coroutines.Dispatchers |
5 | 7 | import kotlinx.coroutines.SupervisorJob |
6 | 8 | import kotlinx.coroutines.cancel |
| 9 | +import kotlinx.coroutines.channels.BufferOverflow |
7 | 10 | import kotlinx.coroutines.flow.Flow |
8 | 11 | import kotlinx.coroutines.flow.MutableSharedFlow |
9 | 12 | import kotlinx.coroutines.flow.MutableStateFlow |
10 | 13 | import kotlinx.coroutines.flow.SharedFlow |
11 | 14 | import kotlinx.coroutines.flow.StateFlow |
12 | 15 | import kotlinx.coroutines.flow.launchIn |
13 | 16 | import kotlinx.coroutines.flow.onEach |
14 | | -import kotlin.jvm.JvmName |
15 | 17 |
|
16 | | -public class CStateFlow<out T : Any>(private val origin: StateFlow<T>) : StateFlow<T> by origin { |
| 18 | +public class CStateFlow<out T>(private val origin: StateFlow<T>) : StateFlow<T> by origin { |
17 | 19 | public fun subscribe(block: (T) -> Unit): Disposable = flowSubscribe(block) |
18 | 20 | } |
19 | 21 |
|
20 | | -public class CSharedFlow<out T : Any?>(private val origin: SharedFlow<T>) : SharedFlow<T> by origin { |
| 22 | +public class CSharedFlow<out T>(private val origin: SharedFlow<T>) : |
| 23 | + SharedFlow<T> by origin { |
21 | 24 | public fun subscribe(block: (T) -> Unit): Disposable = flowSubscribe(block) |
22 | 25 | } |
23 | 26 |
|
24 | | -public class CFlow<out T : Any>(private val origin: Flow<T>) : Flow<T> by origin { |
| 27 | +public class CFlow<out T>(private val origin: Flow<T>) : Flow<T> by origin { |
25 | 28 | public fun subscribe(block: (T) -> Unit): Disposable = flowSubscribe(block) |
26 | 29 | } |
27 | 30 |
|
28 | | -public class CMutableStateFlow<T : Any>(private val origin: MutableStateFlow<T>) : |
| 31 | +public class CMutableStateFlow<T>(private val origin: MutableStateFlow<T>) : |
29 | 32 | MutableStateFlow<T> by origin { |
30 | 33 | public fun subscribe(block: (T) -> Unit): Disposable = flowSubscribe(block) |
31 | 34 | } |
32 | 35 |
|
33 | | -public class CMutableSharedFlow<T : Any>(private val origin: MutableSharedFlow<T>) : |
| 36 | +public class CMutableSharedFlow<T>(private val origin: MutableSharedFlow<T>) : |
34 | 37 | MutableSharedFlow<T> by origin { |
35 | 38 | public fun subscribe(block: (T) -> Unit): Disposable = flowSubscribe(block) |
36 | 39 | } |
37 | 40 |
|
38 | | -public fun <T : Any> Flow<T>.cFlow(): CFlow<T> = CFlow(this) |
39 | | - |
40 | | -public fun <T : Any> StateFlow<T>.cStateFlow(): CStateFlow<T> = CStateFlow(this) |
| 41 | +public fun <T> Flow<T>.cFlow(): CFlow<T> = CFlow(this) |
41 | 42 |
|
42 | | -public fun <T : Any> SharedFlow<T>.cSharedFlow(): CSharedFlow<T> = CSharedFlow(this) |
| 43 | +public fun <T> StateFlow<T>.cStateFlow(): CStateFlow<T> = CStateFlow(this) |
43 | 44 |
|
44 | | -@JvmName("cSharedFlowOptional") |
45 | | -public fun <T : Any?> SharedFlow<T>.cSharedFlow(): CSharedFlow<T?> = CSharedFlow(this) |
| 45 | +public fun <T> SharedFlow<T>.cSharedFlow(): CSharedFlow<T> = CSharedFlow(this) |
46 | 46 |
|
47 | | -public fun <T : Any> MutableStateFlow<T>.cMutableStateFlow(): CMutableStateFlow<T> = |
| 47 | +public fun <T> MutableStateFlow<T>.cMutableStateFlow(): CMutableStateFlow<T> = |
48 | 48 | CMutableStateFlow(this) |
49 | 49 |
|
50 | | -public fun <T : Any> CMutableSharedFlow<T>.cMutableSharedFlow(): CMutableSharedFlow<T> = |
| 50 | +public fun <T> MutableSharedFlow<T>.cMutableSharedFlow(): CMutableSharedFlow<T> = |
51 | 51 | CMutableSharedFlow(this) |
52 | 52 |
|
| 53 | + |
| 54 | +public fun <T> CMutableStateFlow(value: T): CMutableStateFlow<T> = |
| 55 | + MutableStateFlow(value).cMutableStateFlow() |
| 56 | + |
| 57 | +public fun <T> CMutableSharedFlow( |
| 58 | + replay: Int = 0, |
| 59 | + extraBufferCapacity: Int = 0, |
| 60 | + onBufferOverflow: BufferOverflow = BufferOverflow.SUSPEND |
| 61 | +): CMutableSharedFlow<T> = MutableSharedFlow<T>( |
| 62 | + replay = replay, |
| 63 | + extraBufferCapacity = extraBufferCapacity, |
| 64 | + onBufferOverflow = onBufferOverflow |
| 65 | +).cMutableSharedFlow() |
| 66 | + |
53 | 67 | private fun <T> Flow<T>.flowSubscribe(block: (T) -> Unit): Disposable = |
54 | 68 | CoroutineScope(SupervisorJob() + Dispatchers.Main) |
55 | 69 | .also { onEach(block).launchIn(it) } |
|
0 commit comments