//===--- Mutex+Extensions.swift -------------------------------------------===// // // This source file is part of the Swift.org open source project // // Copyright (c) 2025 Apple Inc. and the Swift project authors // Licensed under Apache License v2.0 with Runtime Library Exception // // See https://swift.org/LICENSE.txt for license information // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // //===----------------------------------------------------------------------===// import Synchronization extension Mutex { init() where Value == Void { self.init(()) } init() where Value == T? { self.init(nil) } init() where Value == [T] { self.init([]) } init() where Value == [T: U] { self.init([:]) } } /// Having to write `_ in` when the value is `Void` is annoying. extension Mutex where Value == Void { borrowing func withLock( _ body: () throws(E) -> sending Result ) throws(E) -> sending Result { return try self.withLock { _ throws(E) in try body() } } }