mirror of
https://github.com/samsonjs/SwiftTimeZoneLookup.git
synced 2026-03-25 08:25:49 +00:00
add c wrapper
This commit is contained in:
parent
0b88a98474
commit
f58408cb4e
8 changed files with 65 additions and 10 deletions
|
|
@ -21,7 +21,8 @@ let package = Package(
|
|||
.target(name: "CZoneDetect"),
|
||||
.target(
|
||||
name: "SwiftTimeZoneLookup",
|
||||
dependencies: ["CZoneDetect"]),
|
||||
dependencies: ["CZoneDetect"],
|
||||
resources: [.process("Resources")]),
|
||||
.testTarget(
|
||||
name: "SwiftTimeZoneLookupTests",
|
||||
dependencies: ["SwiftTimeZoneLookup"]),
|
||||
|
|
|
|||
14
README.md
14
README.md
|
|
@ -1,3 +1,17 @@
|
|||
# SwiftTimeZoneLookup
|
||||
|
||||
A description of this package.
|
||||
|
||||
|
||||
## Build database
|
||||
```bash
|
||||
brew install shapelib wget
|
||||
cd Submodules/ZoneDetect/database/builder
|
||||
|
||||
# make sure to select to newest version in make.db script
|
||||
|
||||
LIBRARY_PATH=/opt/homebrew/Cellar/shapelib/1.5.0/lib CPATH=/opt/homebrew/Cellar/shapelib/1.5.0/include ./makedb.sh
|
||||
|
||||
cp out_v1/timezone* ../../../../Sources/SwiftTimeZoneLookup/Resources
|
||||
|
||||
```
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
#include "../src/timezonedetect.h"
|
||||
#include "../src/zonedetect.h"
|
||||
|
|
|
|||
5
Sources/SwiftTimeZoneLookup/Resources/README.md
Normal file
5
Sources/SwiftTimeZoneLookup/Resources/README.md
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
Database version 2021c
|
||||
|
||||
Generated on 2022-08-07
|
||||
|
||||
https://github.com/evansiroky/timezone-boundary-builder/releases/tag/2021c
|
||||
BIN
Sources/SwiftTimeZoneLookup/Resources/timezone16.bin
Normal file
BIN
Sources/SwiftTimeZoneLookup/Resources/timezone16.bin
Normal file
Binary file not shown.
BIN
Sources/SwiftTimeZoneLookup/Resources/timezone21.bin
Normal file
BIN
Sources/SwiftTimeZoneLookup/Resources/timezone21.bin
Normal file
Binary file not shown.
|
|
@ -1,6 +1,40 @@
|
|||
public struct SwiftTimeZoneLookup {
|
||||
public private(set) var text = "Hello, World!"
|
||||
@_implementationOnly import CZoneDetect
|
||||
import Foundation
|
||||
|
||||
public init() {
|
||||
public enum SwiftTimeZoneLookupError: Error {
|
||||
case couldNotFindTimezone21bin
|
||||
case couldNotOpenDatabase
|
||||
}
|
||||
|
||||
public final class SwiftTimeZoneLookup {
|
||||
private let database: OpaquePointer
|
||||
|
||||
public init() throws {
|
||||
guard let timezone21 = Bundle.module.url(forResource: "timezone21", withExtension: "bin") else {
|
||||
throw SwiftTimeZoneLookupError.couldNotFindTimezone21bin
|
||||
}
|
||||
|
||||
guard let database = timezone21.withUnsafeFileSystemRepresentation({ timezone21 in
|
||||
ZDOpenDatabase(timezone21)
|
||||
}) else {
|
||||
throw SwiftTimeZoneLookupError.couldNotOpenDatabase
|
||||
}
|
||||
self.database = database
|
||||
|
||||
|
||||
print(timezone21)
|
||||
}
|
||||
|
||||
public func lookup(latitude: Float, longitude: Float) -> String {
|
||||
guard let cTimezone = ZDHelperSimpleLookupString(database, latitude, longitude) else {
|
||||
fatalError()
|
||||
}
|
||||
let timezone = String(cString: cTimezone)
|
||||
ZDHelperSimpleLookupStringFree(cTimezone)
|
||||
return timezone
|
||||
}
|
||||
|
||||
deinit {
|
||||
ZDCloseDatabase(database)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,10 +2,11 @@ import XCTest
|
|||
@testable import SwiftTimeZoneLookup
|
||||
|
||||
final class SwiftTimeZoneLookupTests: XCTestCase {
|
||||
func testExample() throws {
|
||||
// This is an example of a functional test case.
|
||||
// Use XCTAssert and related functions to verify your tests produce the correct
|
||||
// results.
|
||||
XCTAssertEqual(SwiftTimeZoneLookup().text, "Hello, World!")
|
||||
func testLookup() throws {
|
||||
let database = try SwiftTimeZoneLookup()
|
||||
XCTAssertEqual(database.lookup(latitude: 47.5, longitude: 8.6), "Europe/Zurich")
|
||||
XCTAssertEqual(database.lookup(latitude: 47.5, longitude: -2.6), "Europe/Paris")
|
||||
XCTAssertEqual(database.lookup(latitude: 47.5, longitude: -8.6), "Etc/GMT+1")
|
||||
XCTAssertEqual(database.lookup(latitude: 42.5, longitude: -8.6), "Europe/Madrid")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue