Skip to content
Snippets Groups Projects
Select Git revision
  • f01aa47c42a205b7dfa6e315ed0a73c0b13b286a
  • main default protected
  • development
  • integration
  • v1.1.5
  • v1.1.4
  • v1.1.3
  • v1.1.2
  • v1.1.1
  • v1.1.0
  • v1.0.0
11 results

RestlikeRequest.swift

Blame
  • RestlikeRequest.swift 1.49 KiB
    import Bindings
    import XCTestDynamicOverlay
    
    public struct RestlikeRequest {
      public var run: (Bool, Int, Int, RestlikeMessage, Data) throws -> RestlikeMessage
    
      public func callAsFunction(
        authenticated: Bool,
        clientId: Int,
        connectionId: Int,
        request: RestlikeMessage,
        e2eParams: Data
      ) throws -> RestlikeMessage {
        try run(authenticated, clientId, connectionId, request, e2eParams)
      }
    }
    
    extension RestlikeRequest {
      public static func live() -> RestlikeRequest {
        RestlikeRequest { authenticated, clientId, connectionId, request, e2eParams in
          let requestData = try request.encode()
          var error: NSError?
          let responseData: Data?
          if authenticated {
            responseData = BindingsRestlikeRequest(
              clientId,
              connectionId,
              requestData,
              e2eParams,
              &error
            )
          } else {
            responseData = BindingsRestlikeRequestAuth(
              clientId,
              connectionId,
              requestData,
              e2eParams,
              &error
            )
          }
          if let error = error {
            throw error
          }
          guard let responseData = responseData else {
            let functionName = "BindingsRestlikeRequest\(authenticated ? "Auth" : "")"
            fatalError("\(functionName) returned `nil` without providing error")
          }
          return try RestlikeMessage.decode(responseData)
        }
      }
    }
    
    extension RestlikeRequest {
      public static let unimplemented = RestlikeRequest(
        run: XCTUnimplemented("\(Self.self)")
      )
    }