Skip to content

Instantly share code, notes, and snippets.

@PyYoshi
Created September 25, 2015 14:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save PyYoshi/71d1bfa604f24a002864 to your computer and use it in GitHub Desktop.
Save PyYoshi/71d1bfa604f24a002864 to your computer and use it in GitHub Desktop.
extension Alamofire.Request {
public func responseObject<T: Decodable where T == T.DecodedType>(completionHandler: Response<T, NSError> -> Void) -> Self {
let responseSerializer = ResponseSerializer<T, NSError> { request, response, data, error in
guard error == nil else { return .Failure(error!) }
let JSONResponseSerializer = Request.JSONResponseSerializer(options: .AllowFragments)
let result = JSONResponseSerializer.serializeResponse(request, response, data, error)
switch result {
case .Success(let value):
let decoded: Decoded<T> = decode(value)
switch decoded {
case .Success(let object):
return .Success(object)
case .Failure(.MissingKey(let key)):
return .Failure(Error.errorWithCode(.JSONSerializationFailed, failureReason: "Missing key \(key): \(value)"))
case .Failure(.TypeMismatch(let type)):
return .Failure(Error.errorWithCode(.JSONSerializationFailed, failureReason: "Type mismatch for \(type): \(value)"))
}
case .Failure(let error):
return .Failure(error)
}
}
return response(responseSerializer: responseSerializer, completionHandler: completionHandler)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment