From a6e45d6157dea0b307b731772b35a09254c61aab Mon Sep 17 00:00:00 2001 From: vladopajic Date: Thu, 13 Feb 2025 16:27:29 +0100 Subject: [PATCH] chore: list raised exceptions in `utils` module (#1252) part of https://github.com/vacp2p/nim-libp2p/issues/962 effort. --- libp2p/utils/future.nim | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/libp2p/utils/future.nim b/libp2p/utils/future.nim index 61289af0e..6d079c5ce 100644 --- a/libp2p/utils/future.nim +++ b/libp2p/utils/future.nim @@ -13,21 +13,25 @@ import chronos type AllFuturesFailedError* = object of CatchableError -proc anyCompleted*[T](futs: seq[Future[T]]): Future[Future[T]] {.async.} = +proc anyCompleted*[T]( + futs: seq[Future[T]] +): Future[Future[T]] {.async: (raises: [AllFuturesFailedError, CancelledError]).} = ## Returns a future that will complete with the first future that completes. ## If all futures fail or futs is empty, the returned future will fail with AllFuturesFailedError. var requests = futs while true: - if requests.len == 0: + var raceFut: Future[T] + + try: + raceFut = await one(requests) + if raceFut.completed: + return raceFut + except ValueError: raise newException( AllFuturesFailedError, "None of the futures completed successfully" ) - var raceFut = await one(requests) - if raceFut.completed: - return raceFut - let index = requests.find(raceFut) requests.del(index)