diff --git a/README.md b/README.md index 0b61219..32ffded 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # SwiftTimeZoneLookup +[![Test](https://github.com/patrick-zippenfenig/SwiftTimeZoneLookup/actions/workflows/test.yml/badge.svg)](https://github.com/patrick-zippenfenig/SwiftTimeZoneLookup/actions/workflows/test.yml) + A description of this package. diff --git a/Sources/SwiftTimeZoneLookup/SwiftTimeZoneLookup.swift b/Sources/SwiftTimeZoneLookup/SwiftTimeZoneLookup.swift index b63a6c5..6ef1e05 100644 --- a/Sources/SwiftTimeZoneLookup/SwiftTimeZoneLookup.swift +++ b/Sources/SwiftTimeZoneLookup/SwiftTimeZoneLookup.swift @@ -6,9 +6,21 @@ public enum SwiftTimeZoneLookupError: Error { case couldNotOpenDatabase } +public struct SwiftTimeZoneLookupResult { + /// Timezone identifier like `Europe/Berlin` + let timezone: String + + /// Country name like `Germany` + let countryName: String? + + /// 2 character country code like `DE` for Germany + let countryAlpha2: String? +} + public final class SwiftTimeZoneLookup { private let database: OpaquePointer + /// Throws if the timezone database could not be opened public init() throws { guard let timezone21 = Bundle.module.url(forResource: "timezone21", withExtension: "bin") else { throw SwiftTimeZoneLookupError.couldNotFindTimezone21bin @@ -21,13 +33,14 @@ public final class SwiftTimeZoneLookup { self.database = database } - public func lookup(latitude: Float, longitude: Float) -> String? { + /// Resolve timezone by coordinate and return timezone, country name and alpha2 + public func lookup(latitude: Float, longitude: Float) -> SwiftTimeZoneLookupResult? { guard let result = ZDLookup(database, latitude, longitude, nil) else { return nil } defer { ZDFreeResults(result) } - /*var countryName: String? = nil - var countryAlpha2: String? = nil*/ + var countryName: String? = nil + var countryAlpha2: String? = nil var timezoneIdPrefix: UnsafeMutablePointer? = nil var timezoneId: UnsafeMutablePointer? = nil for i in 0.. String? { + guard let result = ZDLookup(database, latitude, longitude, nil) else { + return nil + } + defer { ZDFreeResults(result) } + var timezoneIdPrefix: UnsafeMutablePointer? = nil + var timezoneId: UnsafeMutablePointer? = nil + for i in 0..