Commit 1c2d8cea authored by Him188's avatar Him188

Rename `filter` to `mapper`

parent 48cf885c
...@@ -11,42 +11,45 @@ package net.mamoe.mirai.event ...@@ -11,42 +11,45 @@ package net.mamoe.mirai.event
import kotlinx.coroutines.* import kotlinx.coroutines.*
import net.mamoe.mirai.utils.MiraiExperimentalAPI import net.mamoe.mirai.utils.MiraiExperimentalAPI
import net.mamoe.mirai.utils.SinceMirai
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext
import kotlin.coroutines.EmptyCoroutineContext import kotlin.coroutines.EmptyCoroutineContext
/** /**
* 挂起当前协程, 监听这个事件, 并尝试从这个事件中获取一个值. * 挂起当前协程, 监听这个事件, 并尝试从这个事件中获取一个值.
* *
* 若 [filter] 抛出了一个异常, 本函数会立即抛出这个异常. * 若 [mapper] 抛出了一个异常, 本函数会立即抛出这个异常.
* *
* @param timeoutMillis 超时. 单位为毫秒. `-1` 为不限制 * @param timeoutMillis 超时. 单位为毫秒. `-1` 为不限制
* @param filter 过滤器. 返回非 null 则代表得到了需要的值. [subscribingGet] 会返回这个值 * @param mapper 过滤转换器. 返回非 null 则代表得到了需要的值. [subscribingGet] 会返回这个值
* *
* @see subscribingGetAsync 本函数的异步版本 * @see subscribingGetAsync 本函数的异步版本
*/ */
@SinceMirai("0.28.0")
@MiraiExperimentalAPI @MiraiExperimentalAPI
suspend inline fun <reified E : Event, R : Any> subscribingGet( suspend inline fun <reified E : Event, R : Any> subscribingGet(
timeoutMillis: Long = -1, timeoutMillis: Long = -1,
noinline filter: E.(E) -> R? // 不要 crossinline: crossinline 后 stacktrace 会不正常 noinline mapper: suspend E.(E) -> R? // 不要 crossinline: crossinline 后 stacktrace 会不正常
): R { ): R {
require(timeoutMillis == -1L || timeoutMillis > 0) { "timeoutMillis must be -1 or > 0" } require(timeoutMillis == -1L || timeoutMillis > 0) { "timeoutMillis must be -1 or > 0" }
return subscribingGetOrNull(timeoutMillis, filter) ?: error("timeout subscribingGet") return subscribingGetOrNull(timeoutMillis, mapper) ?: error("timeout subscribingGet")
} }
/** /**
* 挂起当前协程, 监听这个事件, 并尝试从这个事件中获取一个值. * 挂起当前协程, 监听这个事件, 并尝试从这个事件中获取一个值.
* *
* 若 [filter] 抛出了一个异常, 本函数会立即抛出这个异常. * 若 [mapper] 抛出了一个异常, 本函数会立即抛出这个异常.
* *
* @param timeoutMillis 超时. 单位为毫秒. `-1` 为不限制 * @param timeoutMillis 超时. 单位为毫秒. `-1` 为不限制
* @param filter 过滤器. 返回非 null 则代表得到了需要的值. [subscribingGet] 会返回这个值 * @param mapper 过滤转换器. 返回非 null 则代表得到了需要的值. [subscribingGet] 会返回这个值
* *
* @see subscribingGetAsync 本函数的异步版本 * @see subscribingGetAsync 本函数的异步版本
*/ */
@SinceMirai("0.28.0")
@MiraiExperimentalAPI @MiraiExperimentalAPI
suspend inline fun <reified E : Event, R : Any> subscribingGetOrNull( suspend inline fun <reified E : Event, R : Any> subscribingGetOrNull(
timeoutMillis: Long = -1, timeoutMillis: Long = -1,
noinline filter: E.(E) -> R? // 不要 crossinline: crossinline 后 stacktrace 会不正常 noinline mapper: suspend E.(E) -> R? // 不要 crossinline: crossinline 后 stacktrace 会不正常
): R? { ): R? {
require(timeoutMillis == -1L || timeoutMillis > 0) { "timeoutMillis must be -1 or > 0" } require(timeoutMillis == -1L || timeoutMillis > 0) { "timeoutMillis must be -1 or > 0" }
var result: R? = null var result: R? = null
...@@ -58,7 +61,7 @@ suspend inline fun <reified E : Event, R : Any> subscribingGetOrNull( ...@@ -58,7 +61,7 @@ suspend inline fun <reified E : Event, R : Any> subscribingGetOrNull(
var listener: Listener<E>? = null var listener: Listener<E>? = null
listener = this.subscribe { listener = this.subscribe {
val value = try { val value = try {
filter.invoke(this, it) mapper.invoke(this, it)
} catch (e: Exception) { } catch (e: Exception) {
resultThrowable = e resultThrowable = e
return@subscribe ListeningStatus.STOPPED.also { listener!!.complete() } return@subscribe ListeningStatus.STOPPED.also { listener!!.complete() }
...@@ -76,7 +79,7 @@ suspend inline fun <reified E : Event, R : Any> subscribingGetOrNull( ...@@ -76,7 +79,7 @@ suspend inline fun <reified E : Event, R : Any> subscribingGetOrNull(
@Suppress("DuplicatedCode") // for better performance @Suppress("DuplicatedCode") // for better performance
listener = this.subscribe { listener = this.subscribe {
val value = try { val value = try {
filter.invoke(this, it) mapper.invoke(this, it)
} catch (e: Exception) { } catch (e: Exception) {
resultThrowable = e resultThrowable = e
return@subscribe ListeningStatus.STOPPED.also { listener!!.complete() } return@subscribe ListeningStatus.STOPPED.also { listener!!.complete() }
...@@ -96,17 +99,17 @@ suspend inline fun <reified E : Event, R : Any> subscribingGetOrNull( ...@@ -96,17 +99,17 @@ suspend inline fun <reified E : Event, R : Any> subscribingGetOrNull(
/** /**
* 异步监听这个事件, 并尝试从这个事件中获取一个值. * 异步监听这个事件, 并尝试从这个事件中获取一个值.
* *
* 若 [filter] 抛出的异常将会被传递给 [Deferred.await] 抛出. * 若 [mapper] 抛出的异常将会被传递给 [Deferred.await] 抛出.
* *
* @param timeoutMillis 超时. 单位为毫秒. `-1` 为不限制 * @param timeoutMillis 超时. 单位为毫秒. `-1` 为不限制
* @param coroutineContext 额外的 [CoroutineContext] * @param coroutineContext 额外的 [CoroutineContext]
* @param filter 过滤器. 返回非 null 则代表得到了需要的值. [subscribingGet] 会返回这个值 * @param mapper 过滤转换器. 返回非 null 则代表得到了需要的值. [subscribingGet] 会返回这个值
*/ */
@MiraiExperimentalAPI @MiraiExperimentalAPI
inline fun <reified E : Event, R : Any> CoroutineScope.subscribingGetAsync( inline fun <reified E : Event, R : Any> CoroutineScope.subscribingGetAsync(
coroutineContext: CoroutineContext = EmptyCoroutineContext, coroutineContext: CoroutineContext = EmptyCoroutineContext,
timeoutMillis: Long = -1, timeoutMillis: Long = -1,
noinline filter: E.(E) -> R? // 不要 crossinline: crossinline 后 stacktrace 会不正常 noinline mapper: suspend E.(E) -> R? // 不要 crossinline: crossinline 后 stacktrace 会不正常
): Deferred<R> = this.async(coroutineContext) { ): Deferred<R> = this.async(coroutineContext) {
subscribingGet(timeoutMillis, filter) subscribingGet(timeoutMillis, mapper)
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment