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: "CZoneDetect"),
|
||||||
.target(
|
.target(
|
||||||
name: "SwiftTimeZoneLookup",
|
name: "SwiftTimeZoneLookup",
|
||||||
dependencies: ["CZoneDetect"]),
|
dependencies: ["CZoneDetect"],
|
||||||
|
resources: [.process("Resources")]),
|
||||||
.testTarget(
|
.testTarget(
|
||||||
name: "SwiftTimeZoneLookupTests",
|
name: "SwiftTimeZoneLookupTests",
|
||||||
dependencies: ["SwiftTimeZoneLookup"]),
|
dependencies: ["SwiftTimeZoneLookup"]),
|
||||||
|
|
|
||||||
14
README.md
14
README.md
|
|
@ -1,3 +1,17 @@
|
||||||
# SwiftTimeZoneLookup
|
# SwiftTimeZoneLookup
|
||||||
|
|
||||||
A description of this package.
|
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 {
|
@_implementationOnly import CZoneDetect
|
||||||
public private(set) var text = "Hello, World!"
|
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
|
@testable import SwiftTimeZoneLookup
|
||||||
|
|
||||||
final class SwiftTimeZoneLookupTests: XCTestCase {
|
final class SwiftTimeZoneLookupTests: XCTestCase {
|
||||||
func testExample() throws {
|
func testLookup() throws {
|
||||||
// This is an example of a functional test case.
|
let database = try SwiftTimeZoneLookup()
|
||||||
// Use XCTAssert and related functions to verify your tests produce the correct
|
XCTAssertEqual(database.lookup(latitude: 47.5, longitude: 8.6), "Europe/Zurich")
|
||||||
// results.
|
XCTAssertEqual(database.lookup(latitude: 47.5, longitude: -2.6), "Europe/Paris")
|
||||||
XCTAssertEqual(SwiftTimeZoneLookup().text, "Hello, World!")
|
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