TM-SGNL-iOS/SignalServiceKit/PromiseKit/Guarantee+Timeout.swift
TeleMessage developers dde0620daf initial commit
2025-05-03 12:28:28 -07:00

27 lines
819 B
Swift

//
// Copyright 2023 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import Foundation
public extension Guarantee {
func nilTimeout(
on scheduler: Scheduler,
seconds: TimeInterval
) -> Guarantee<Value?> {
let withOptionalValue: Guarantee<Value?> = self.map(on: scheduler) { $0 }
return withOptionalValue.timeout(on: scheduler, seconds: seconds, substituteValue: nil)
}
func timeout(
on scheduler: Scheduler,
seconds: TimeInterval,
substituteValue: Value
) -> Guarantee<Value> {
let substitute: Guarantee<Value> = Guarantee<Void>
.after(on: scheduler, seconds: seconds)
.map(on: scheduler) { substituteValue }
return Guarantee<Value>.race(on: scheduler, [self, substitute])
}
}