Skip to content

Instantly share code, notes, and snippets.

View IsaAliev's full-sized avatar

Isa Aliev IsaAliev

  • Moscow, Russia
View GitHub Profile
import Foundation
enum HTTPMethod: String {
case GET
case POST
case PUT
case DELETE
}
protocol HTTPRequestRepresentable {
import Foundation
typealias JSON = [String: Any]
enum Result<T> {
case Value(T)
case Error(ErrorRepresentable)
case None
}
import Foundation
protocol RequestPreparator {
func prepareRequest(_ request: inout HTTPRequestRepresentable)
}
import Foundation
protocol SuccessResponseChecker {
func isSuccessResponse(_ response: ResponseRepresentable) -> Bool
}
import Foundation
protocol ErrorHandler {
var errorCodeHandler: ErrorCodeHandler { get set }
var errorCodeGetter: ErrorCodeGetter { get set }
var errorMessageGetter: ErrorMessageGetter { get set }
func handleErrorResponse(_ response: ResponseRepresentable, completion: (ErrorRepresentable) -> ())
}
import Foundation
protocol DecodingProcessor {
associatedtype DecodingResult
func decodeFrom(_ data: Data) throws -> DecodingResult
}
import Foundation
protocol ErrorCodeGetter {
func errorCodeFrom(_ response: ResponseRepresentable) -> Int
}
import Foundation
protocol ErrorMessageGetter {
func messageFromErrorData(_ data: Data) -> String
}
import Foundation
protocol ErrorCodeHandler {
func handleError(with code: Int)
}
import Foundation
protocol Service {
associatedtype ResultTypeValue: Decodable
typealias SuccessHandlerBlock = (ResultTypeValue) -> ()
typealias FailureHandlerBlock = (ErrorRepresentable) -> ()
var request: HTTPRequestRepresentable? { get set }
var responseHandler: HTTPResponseHandler<ResultTypeValue>? { get set }