//===----------------------------------------------------------------------===//
//
// 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
//
//===----------------------------------------------------------------------===//

@_spi(SourceKitLSP) import LanguageServerProtocol
import SourceKitD

extension ResponseError {
  package init(_ error: some Error) {
    switch error {
    case let error as ResponseError:
      self = error
    case let error as SKDError:
      self.init(error)
    case is CancellationError:
      self = .cancelled
    default:
      self = .unknown("Unknown error: \(error)")
    }
  }

  private init(_ value: SKDError) {
    switch value {
    case .requestCancelled:
      self = .cancelled
    case .timedOut:
      self = .unknown("sourcekitd request timed out")
    case .requestFailed(let desc):
      self = .unknown("sourcekitd request failed: \(desc)")
    case .requestInvalid(let desc):
      self = .unknown("sourcekitd invalid request \(desc)")
    case .missingRequiredSymbol(let desc):
      self = .unknown("sourcekitd missing required symbol '\(desc)'")
    case .connectionInterrupted:
      self = .unknown("sourcekitd connection interrupted")
    }
  }
}
