summaryrefslogtreecommitdiff
path: root/DomainDig/IPGeolocationService.swift
diff options
context:
space:
mode:
Diffstat (limited to 'DomainDig/IPGeolocationService.swift')
-rw-r--r--DomainDig/IPGeolocationService.swift19
1 files changed, 12 insertions, 7 deletions
diff --git a/DomainDig/IPGeolocationService.swift b/DomainDig/IPGeolocationService.swift
index 6c60295..809dd28 100644
--- a/DomainDig/IPGeolocationService.swift
+++ b/DomainDig/IPGeolocationService.swift
@@ -1,17 +1,22 @@
import Foundation
struct IPGeolocationService {
- static func lookup(ip: String) async throws -> IPGeolocation {
+ static func lookup(ip: String) async -> ServiceResult<IPGeolocation> {
let url = URL(string: "https://ipapi.co/\(ip)/json/")!
let request = URLRequest(url: url, timeoutInterval: 10)
- let (data, response) = try await URLSession.shared.data(for: request)
+ do {
+ let (data, response) = try await URLSession.shared.data(for: request)
- guard let httpResponse = response as? HTTPURLResponse,
- httpResponse.statusCode == 200 else {
- throw URLError(.badServerResponse)
- }
+ guard let httpResponse = response as? HTTPURLResponse,
+ httpResponse.statusCode == 200 else {
+ return .error(URLError(.badServerResponse).localizedDescription)
+ }
- return try JSONDecoder().decode(IPGeolocation.self, from: data)
+ let geolocation = try JSONDecoder().decode(IPGeolocation.self, from: data)
+ return .success(geolocation)
+ } catch {
+ return .error(error.localizedDescription)
+ }
}
}