[fleet] Resource<*>.span

GitOrigin-RevId: 6860bb799d48da528d511fdbb7f96b619d946346
This commit is contained in:
Alexander Shparun
2024-09-18 05:24:29 +02:00
committed by intellij-monorepo-bot
parent 137ee8f6af
commit 7968a25171

View File

@@ -3,6 +3,7 @@
package fleet.util.async
import fleet.tracing.SpanInfoBuilder
import fleet.tracing.spannedScope
import kotlinx.coroutines.*
import java.lang.RuntimeException
@@ -123,6 +124,17 @@ fun <T> Resource<Deferred<T>>.track(displayName: String): Resource<Deferred<T>>
}
}
fun <T> Resource<T>.span(name: String, info: SpanInfoBuilder.() -> Unit = {}): Resource<T> =
let { source ->
resource { cc ->
spannedScope(name, info) {
source.use { t ->
cc(t)
}
}
}
}
fun <T> Resource<T>.catch(): Resource<Result<T>> =
let { source ->
object : Resource<Result<T>> {
@@ -184,7 +196,7 @@ fun <T> Deferred<T>.track(displayName: String): Deferred<T> =
}
@OptIn(ExperimentalCoroutinesApi::class)
fun<T> Resource<T>.useOn(coroutineScope: CoroutineScope): Deferred<T> {
fun <T> Resource<T>.useOn(coroutineScope: CoroutineScope): Deferred<T> {
val deferred = CompletableDeferred<T>()
coroutineScope.launch(start = CoroutineStart.ATOMIC) {
use { t ->