import Foundation
import Alamofire
enum DataError: Error {
case duplicateFailure
case nonExistent
case incomplete
}
class CharacterService {
func getCharacters(completion: @escaping (Result<Array<Character>, DataError>) -> ()) {
let urlString = "https://rickandmortyapi.com/api/character"
guard let url = URL(string: urlString) else { return }
URLSession.shared.dataTask(with: url) { (data, response, error) in
DispatchQueue.main.async {
if let error = error {
completion(.failure(error))
return
}
do {
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
decoder.dateDecodingStrategy = .formatted(DateFormatter.iso8601Full)
let characterResult = try decoder.decode(CharacterResult.self, from: data ?? Data())
completion(.success(characterResult.characters ?? []))
} catch let jsonError {
completion(.failure(jsonError))
}
}
}.resume()
}
}