Files
sourcekit-lsp/Sources/LanguageServerProtocolExtensions/Connection+Send.swift
2024-11-13 16:53:58 -08:00

40 lines
1.4 KiB
Swift

//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2023 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
//
//===----------------------------------------------------------------------===//
#if compiler(>=6)
package import LanguageServerProtocol
import SwiftExtensions
#else
import LanguageServerProtocol
import SwiftExtensions
#endif
extension Connection {
/// Send the given request to the connection and await its result.
///
/// This method automatically sends a `CancelRequestNotification` to the
/// connection if the task it is executing in is being cancelled.
///
/// - Warning: Because this message is `async`, it does not provide any ordering
/// guarantees. If you need to guarantee that messages are sent in-order
/// use the version with a completion handler.
package func send<R: RequestType>(_ request: R) async throws -> R.Response {
return try await withCancellableCheckedThrowingContinuation { continuation in
return self.send(request) { result in
continuation.resume(with: result)
}
} cancel: { requestID in
self.send(CancelRequestNotification(id: requestID))
}
}
}