hypertrack-sdk-react-native 10.0.3 → 11.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +54 -0
- package/CONTRIBUTING.md +1 -1
- package/README.md +2 -2
- package/android/build.gradle +5 -1
- package/android/gradle.properties +1 -1
- package/android/src/main/java/com/reactnativehypertracksdk/HyperTrackReactNativePlugin.kt +80 -115
- package/android/src/main/java/com/reactnativehypertracksdk/ReactNativeSerialization.kt +23 -3
- package/android/src/main/java/com/reactnativehypertracksdk/common/HyperTrackSdkWrapper.kt +87 -220
- package/android/src/main/java/com/reactnativehypertracksdk/common/SdkMethod.kt +11 -9
- package/android/src/main/java/com/reactnativehypertracksdk/common/Serialization.kt +216 -132
- package/android/src/main/java/com/reactnativehypertracksdk/common/{Result.kt → WrapperResult.kt} +9 -7
- package/hypertrack-sdk-react-native.podspec +1 -1
- package/ios/HyperTrackReactNativePlugin.m +13 -11
- package/ios/HyperTrackReactNativePlugin.swift +141 -114
- package/ios/common/DictionaryDecoder.swift +5 -5
- package/ios/common/HyperTrackSDKWrapper.swift +46 -80
- package/ios/common/SDKMethod.swift +13 -12
- package/ios/common/Serialization.swift +200 -245
- package/lib/commonjs/HyperTrack/HyperTrack.js +224 -124
- package/lib/commonjs/HyperTrack/HyperTrack.js.map +1 -1
- package/lib/commonjs/HyperTrack/data_types/HyperTrackError.js +13 -17
- package/lib/commonjs/HyperTrack/data_types/HyperTrackError.js.map +1 -1
- package/lib/commonjs/HyperTrack/data_types/internal/HyperTrackErrorInternal.js.map +1 -1
- package/lib/commonjs/HyperTrack/data_types/internal/Metadata.js +2 -0
- package/lib/commonjs/HyperTrack/data_types/internal/Metadata.js.map +1 -0
- package/lib/commonjs/HyperTrack/data_types/internal/Name.js +2 -0
- package/lib/commonjs/HyperTrack/data_types/internal/Name.js.map +1 -0
- package/lib/commonjs/index.js +0 -7
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/HyperTrack/HyperTrack.js +224 -124
- package/lib/module/HyperTrack/HyperTrack.js.map +1 -1
- package/lib/module/HyperTrack/data_types/HyperTrackError.js +13 -17
- package/lib/module/HyperTrack/data_types/HyperTrackError.js.map +1 -1
- package/lib/module/HyperTrack/data_types/internal/HyperTrackErrorInternal.js.map +1 -1
- package/lib/module/HyperTrack/data_types/internal/Metadata.js +2 -0
- package/lib/module/HyperTrack/data_types/internal/Metadata.js.map +1 -0
- package/lib/module/HyperTrack/data_types/internal/Name.js +2 -0
- package/lib/module/HyperTrack/data_types/internal/Name.js.map +1 -0
- package/lib/module/index.js +0 -1
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/HyperTrack/HyperTrack.d.ts +106 -54
- package/lib/typescript/HyperTrack/data_types/HyperTrackError.d.ts +59 -17
- package/lib/typescript/HyperTrack/data_types/internal/HyperTrackErrorInternal.d.ts +1 -1
- package/lib/typescript/HyperTrack/data_types/internal/Metadata.d.ts +4 -0
- package/lib/typescript/HyperTrack/data_types/internal/Name.d.ts +7 -0
- package/lib/typescript/index.d.ts +0 -1
- package/package.json +1 -1
- package/src/HyperTrack/HyperTrack.ts +281 -161
- package/src/HyperTrack/data_types/HyperTrackError.ts +73 -18
- package/src/HyperTrack/data_types/internal/HyperTrackErrorInternal.ts +3 -3
- package/src/HyperTrack/data_types/internal/Metadata.ts +4 -0
- package/src/HyperTrack/data_types/internal/Name.ts +7 -0
- package/src/index.tsx +0 -1
- package/android/src/main/java/com/reactnativehypertracksdk/common/HyperTrackError.kt +0 -28
- package/android/src/main/java/com/reactnativehypertracksdk/common/LocationError.kt +0 -9
- package/android/src/main/java/com/reactnativehypertracksdk/common/SdkInitParams.kt +0 -44
- package/ios/common/HyperTrackError.swift +0 -20
- package/ios/common/SDKInitParams.swift +0 -13
- package/lib/commonjs/HyperTrack/data_types/SdkInitParams.js +0 -2
- package/lib/commonjs/HyperTrack/data_types/SdkInitParams.js.map +0 -1
- package/lib/commonjs/HyperTrack/data_types/internal/DeviceName.js +0 -2
- package/lib/commonjs/HyperTrack/data_types/internal/DeviceName.js.map +0 -1
- package/lib/module/HyperTrack/data_types/SdkInitParams.js +0 -2
- package/lib/module/HyperTrack/data_types/SdkInitParams.js.map +0 -1
- package/lib/module/HyperTrack/data_types/internal/DeviceName.js +0 -2
- package/lib/module/HyperTrack/data_types/internal/DeviceName.js.map +0 -1
- package/lib/typescript/HyperTrack/data_types/SdkInitParams.d.ts +0 -25
- package/lib/typescript/HyperTrack/data_types/internal/DeviceName.d.ts +0 -4
- package/src/HyperTrack/data_types/SdkInitParams.ts +0 -28
- package/src/HyperTrack/data_types/internal/DeviceName.ts +0 -4
|
@@ -1,102 +1,92 @@
|
|
|
1
1
|
import HyperTrack
|
|
2
2
|
|
|
3
|
+
private let keyExpectedLocation = "expectedLocation"
|
|
4
|
+
private let keyGeotagData = "data"
|
|
3
5
|
private let keyType = "type"
|
|
4
6
|
private let keyValue = "value"
|
|
5
|
-
private let keyGeotagData = "data"
|
|
6
|
-
private let keyExpectedLocation = "expectedLocation"
|
|
7
7
|
|
|
8
|
-
private let
|
|
8
|
+
private let typeError = "error"
|
|
9
9
|
private let typeFailure = "failure"
|
|
10
|
-
private let typeHyperTrackError = "hyperTrackError"
|
|
11
|
-
private let typeIsTracking = "isTracking"
|
|
12
10
|
private let typeIsAvailable = "isAvailable"
|
|
11
|
+
private let typeIsTracking = "isTracking"
|
|
13
12
|
private let typeLocation = "location"
|
|
13
|
+
private let typeMetadata = "metadata"
|
|
14
|
+
private let typeName = "name"
|
|
15
|
+
private let typeSuccess = "success"
|
|
14
16
|
|
|
15
|
-
func
|
|
16
|
-
|
|
17
|
+
func deserializeGeotagData(
|
|
18
|
+
_ args: [String: Any]
|
|
19
|
+
) -> Result<GeotagData, FailureResult> {
|
|
20
|
+
guard let data = args[keyGeotagData] as? [String: Any] else {
|
|
21
|
+
return .failure(.fatalError(getParseError(args, key: keyGeotagData)))
|
|
22
|
+
}
|
|
23
|
+
if let expectedLocationData = args[keyExpectedLocation] as? [String: Any] {
|
|
24
|
+
let expectedLocation = deserializeLocation(expectedLocationData)
|
|
25
|
+
switch expectedLocation {
|
|
26
|
+
case let .failure(failure):
|
|
27
|
+
return .failure(failure)
|
|
28
|
+
case let .success(expectedLocation):
|
|
29
|
+
return .success(.init(data: data, expectedLocation: expectedLocation))
|
|
30
|
+
}
|
|
31
|
+
} else {
|
|
32
|
+
return .success(.init(data: data, expectedLocation: nil))
|
|
33
|
+
}
|
|
17
34
|
}
|
|
18
35
|
|
|
19
|
-
func
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
return HyperTrackError.invalidPublishableKey
|
|
23
|
-
case .motionActivityPermissionsDenied:
|
|
24
|
-
return HyperTrackError.locationPermissionsDenied
|
|
36
|
+
func deserializeIsAvailable(_ data: [String: Any]) -> Result<Bool, FailureResult> {
|
|
37
|
+
if data[keyType] as? String != typeIsAvailable {
|
|
38
|
+
return .failure(.fatalError(getParseError(data, key: keyType)))
|
|
25
39
|
}
|
|
40
|
+
guard let value = data[keyValue] as? Bool else {
|
|
41
|
+
return .failure(.fatalError(getParseError(data, key: keyValue)))
|
|
42
|
+
}
|
|
43
|
+
return .success(value)
|
|
26
44
|
}
|
|
27
45
|
|
|
28
|
-
func
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return
|
|
34
|
-
case .locationPermissionsCantBeAskedInBackground:
|
|
35
|
-
return HyperTrackError.locationPermissionsNotDetermined
|
|
36
|
-
case .motionActivityPermissionsCantBeAskedInBackground:
|
|
37
|
-
return HyperTrackError.motionActivityPermissionsNotDetermined
|
|
38
|
-
case .locationPermissionsRestricted:
|
|
39
|
-
return HyperTrackError.locationPermissionsRestricted
|
|
40
|
-
case .motionActivityPermissionsRestricted:
|
|
41
|
-
return HyperTrackError.motionActivityPermissionsRestricted
|
|
42
|
-
case .locationPermissionsDenied:
|
|
43
|
-
return HyperTrackError.locationPermissionsDenied
|
|
44
|
-
case .locationPermissionsInsufficientForBackground:
|
|
45
|
-
return HyperTrackError.locationPermissionsInsufficientForBackground
|
|
46
|
-
case .locationServicesDisabled:
|
|
47
|
-
return HyperTrackError.locationServicesDisabled
|
|
48
|
-
case .motionActivityServicesDisabled:
|
|
49
|
-
return HyperTrackError.motionActivityServicesDisabled
|
|
50
|
-
case .networkConnectionUnavailable:
|
|
51
|
-
return HyperTrackError.networkConnectionUnavailable
|
|
52
|
-
case .trialEnded:
|
|
53
|
-
return HyperTrackError.blockedFromRunning
|
|
54
|
-
case .paymentDefault:
|
|
55
|
-
return HyperTrackError.blockedFromRunning
|
|
46
|
+
func deserializeIsTracking(_ data: [String: Any]) -> Result<Bool, FailureResult> {
|
|
47
|
+
if data[keyType] as? String != typeIsTracking {
|
|
48
|
+
return .failure(.fatalError(getParseError(data, key: keyType)))
|
|
49
|
+
}
|
|
50
|
+
guard let value = data[keyValue] as? Bool else {
|
|
51
|
+
return .failure(.fatalError(getParseError(data, key: keyValue)))
|
|
56
52
|
}
|
|
53
|
+
return .success(value)
|
|
57
54
|
}
|
|
58
55
|
|
|
59
|
-
func
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
return .
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
return .
|
|
71
|
-
case .locationPermissionsDenied:
|
|
72
|
-
return .locationPermissionsDenied
|
|
73
|
-
case .locationServicesDisabled:
|
|
74
|
-
return .locationServicesDisabled
|
|
75
|
-
case .motionActivityPermissionsNotDetermined:
|
|
76
|
-
return .motionActivityPermissionsNotDetermined
|
|
77
|
-
case .motionActivityPermissionsDenied:
|
|
78
|
-
return .motionActivityPermissionsDenied
|
|
79
|
-
case .motionActivityServicesDisabled:
|
|
80
|
-
return .motionActivityServicesDisabled
|
|
81
|
-
case .motionActivityServicesUnavailable:
|
|
82
|
-
return .motionActivityServicesUnavailable
|
|
83
|
-
case .gpsSignalLost:
|
|
84
|
-
return .gpsSignalLost
|
|
85
|
-
case .locationMocked:
|
|
86
|
-
return .locationMocked
|
|
87
|
-
case .invalidPublishableKey:
|
|
88
|
-
return .invalidPublishableKey
|
|
89
|
-
case .blockedFromRunning:
|
|
90
|
-
return .blockedFromRunning
|
|
91
|
-
default:
|
|
92
|
-
preconditionFailure("Unknown error \(error)")
|
|
56
|
+
func deserializeLocation(_ data: [String: Any]) -> Result<HyperTrack.Location, FailureResult> {
|
|
57
|
+
if data[keyType] as? String != typeLocation {
|
|
58
|
+
return .failure(.fatalError(getParseError(data, key: keyType)))
|
|
59
|
+
}
|
|
60
|
+
guard let value = data[keyValue] as? [String: Any] else {
|
|
61
|
+
return .failure(.fatalError(getParseError(data, key: keyValue)))
|
|
62
|
+
}
|
|
63
|
+
guard let latitude = value["latitude"] as? Double else {
|
|
64
|
+
return .failure(.fatalError(getParseError(value, key: "latitude")))
|
|
65
|
+
}
|
|
66
|
+
guard let longitude = value["longitude"] as? Double else {
|
|
67
|
+
return .failure(.fatalError(getParseError(value, key: "longitude")))
|
|
93
68
|
}
|
|
69
|
+
return .success(.init(latitude: latitude, longitude: longitude))
|
|
94
70
|
}
|
|
95
71
|
|
|
96
|
-
func
|
|
97
|
-
|
|
98
|
-
|
|
72
|
+
func deserializeMetadata(_ data: [String: Any]) -> Result<[String: Any], FailureResult> {
|
|
73
|
+
if data[keyType] as? String != typeMetadata {
|
|
74
|
+
return .failure(.fatalError(getParseError(data, key: keyType)))
|
|
75
|
+
}
|
|
76
|
+
guard let value = data[keyValue] as? [String: Any] else {
|
|
77
|
+
return .failure(.fatalError(getParseError(data, key: keyValue)))
|
|
78
|
+
}
|
|
79
|
+
return .success(value)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
func deserializeName(_ data: [String: Any]) -> Result<String, FailureResult> {
|
|
83
|
+
if data[keyType] as? String != typeName {
|
|
84
|
+
return .failure(.fatalError(getParseError(data, key: keyType)))
|
|
85
|
+
}
|
|
86
|
+
guard let value = data[keyValue] as? String else {
|
|
87
|
+
return .failure(.fatalError(getParseError(data, key: keyValue)))
|
|
99
88
|
}
|
|
89
|
+
return .success(value)
|
|
100
90
|
}
|
|
101
91
|
|
|
102
92
|
func serializeDeviceID(_ deviceID: String) -> [String: Any] {
|
|
@@ -106,65 +96,78 @@ func serializeDeviceID(_ deviceID: String) -> [String: Any] {
|
|
|
106
96
|
]
|
|
107
97
|
}
|
|
108
98
|
|
|
109
|
-
func
|
|
110
|
-
|
|
99
|
+
func serializeError(_ error: HyperTrack.Error) -> [String: Any] {
|
|
100
|
+
let value: String
|
|
101
|
+
switch error {
|
|
102
|
+
case .blockedFromRunning:
|
|
103
|
+
value = "blockedFromRunning"
|
|
104
|
+
case .invalidPublishableKey:
|
|
105
|
+
value = "invalidPublishableKey"
|
|
106
|
+
case let .location(location):
|
|
107
|
+
switch location {
|
|
108
|
+
case .mocked:
|
|
109
|
+
value = "location.mocked"
|
|
110
|
+
case .servicesDisabled:
|
|
111
|
+
value = "location.servicesDisabled"
|
|
112
|
+
case .signalLost:
|
|
113
|
+
value = "location.signalLost"
|
|
114
|
+
}
|
|
115
|
+
case let .permissions(permissionType):
|
|
116
|
+
switch permissionType {
|
|
117
|
+
case let .location(permission):
|
|
118
|
+
switch permission {
|
|
119
|
+
case .denied:
|
|
120
|
+
value = "permissions.location.denied"
|
|
121
|
+
case .insufficientForBackground:
|
|
122
|
+
value = "permissions.location.insufficientForBackground"
|
|
123
|
+
case .notDetermined:
|
|
124
|
+
value = "permissions.location.notDetermined"
|
|
125
|
+
case .provisional:
|
|
126
|
+
value = "permissions.location.provisional"
|
|
127
|
+
case .reducedAccuracy:
|
|
128
|
+
value = "permissions.location.reducedAccuracy"
|
|
129
|
+
case .restricted:
|
|
130
|
+
value = "permissions.location.restricted"
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return [
|
|
136
|
+
keyType: typeError,
|
|
137
|
+
keyValue: value,
|
|
138
|
+
]
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
func serializeIsAvailable(_ isAvailable: Bool) -> [String: Any] {
|
|
142
|
+
return [
|
|
143
|
+
keyType: typeIsAvailable,
|
|
144
|
+
keyValue: isAvailable,
|
|
145
|
+
]
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
func serializeIsTracking(_ isTracking: Bool) -> [String: Any] {
|
|
149
|
+
return [
|
|
150
|
+
keyType: typeIsTracking,
|
|
151
|
+
keyValue: isTracking,
|
|
152
|
+
]
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
func serializeLocateResult(_ locateResult: Result<HyperTrack.Location, Set<HyperTrack.Error>>) -> [String: Any] {
|
|
156
|
+
switch locateResult {
|
|
111
157
|
case let .success(success):
|
|
112
158
|
return [
|
|
113
159
|
keyType: typeSuccess,
|
|
114
|
-
keyValue:
|
|
115
|
-
keyType: typeLocation,
|
|
116
|
-
keyValue: [
|
|
117
|
-
"latitude": success.latitude,
|
|
118
|
-
"longitude": success.longitude,
|
|
119
|
-
],
|
|
120
|
-
],
|
|
160
|
+
keyValue: serializeLocation(success),
|
|
121
161
|
]
|
|
122
162
|
case let .failure(failure):
|
|
123
|
-
var locationError: [String: Any]
|
|
124
|
-
switch failure {
|
|
125
|
-
case .locationPermissionsNotDetermined:
|
|
126
|
-
locationError = serializeHyperTrackErrorAsLocationError(HyperTrackError.locationPermissionsNotDetermined)
|
|
127
|
-
case .locationPermissionsCantBeAskedInBackground:
|
|
128
|
-
locationError = serializeHyperTrackErrorAsLocationError(HyperTrackError.locationPermissionsNotDetermined)
|
|
129
|
-
case .locationPermissionsInsufficientForBackground:
|
|
130
|
-
locationError = serializeHyperTrackErrorAsLocationError(HyperTrackError.locationPermissionsInsufficientForBackground)
|
|
131
|
-
case .locationPermissionsRestricted:
|
|
132
|
-
locationError = serializeHyperTrackErrorAsLocationError(HyperTrackError.locationPermissionsRestricted)
|
|
133
|
-
case .locationPermissionsReducedAccuracy:
|
|
134
|
-
locationError = serializeHyperTrackErrorAsLocationError(HyperTrackError.locationPermissionsReducedAccuracy)
|
|
135
|
-
case .locationPermissionsDenied:
|
|
136
|
-
locationError = serializeHyperTrackErrorAsLocationError(HyperTrackError.locationPermissionsDenied)
|
|
137
|
-
case .locationServicesDisabled:
|
|
138
|
-
locationError = serializeHyperTrackErrorAsLocationError(HyperTrackError.locationServicesDisabled)
|
|
139
|
-
case .motionActivityPermissionsNotDetermined:
|
|
140
|
-
locationError = serializeHyperTrackErrorAsLocationError(HyperTrackError.motionActivityPermissionsNotDetermined)
|
|
141
|
-
case .motionActivityPermissionsCantBeAskedInBackground:
|
|
142
|
-
locationError = serializeHyperTrackErrorAsLocationError(HyperTrackError.motionActivityPermissionsNotDetermined)
|
|
143
|
-
case .motionActivityPermissionsDenied:
|
|
144
|
-
locationError = serializeHyperTrackErrorAsLocationError(HyperTrackError.motionActivityPermissionsDenied)
|
|
145
|
-
case .motionActivityServicesDisabled:
|
|
146
|
-
locationError = serializeHyperTrackErrorAsLocationError(HyperTrackError.motionActivityServicesDisabled)
|
|
147
|
-
case .gpsSignalLost:
|
|
148
|
-
locationError = serializeHyperTrackErrorAsLocationError(HyperTrackError.gpsSignalLost)
|
|
149
|
-
case .locationMocked:
|
|
150
|
-
locationError = serializeHyperTrackErrorAsLocationError(HyperTrackError.locationMocked)
|
|
151
|
-
case .starting:
|
|
152
|
-
locationError = [
|
|
153
|
-
keyType: "starting",
|
|
154
|
-
]
|
|
155
|
-
case .notRunning:
|
|
156
|
-
locationError = [
|
|
157
|
-
keyType: "notRunning",
|
|
158
|
-
]
|
|
159
|
-
}
|
|
160
163
|
return [
|
|
161
164
|
keyType: typeFailure,
|
|
162
|
-
keyValue:
|
|
165
|
+
keyValue: serializeErrors(failure),
|
|
163
166
|
]
|
|
164
167
|
}
|
|
165
168
|
}
|
|
166
169
|
|
|
167
|
-
|
|
170
|
+
func serializeLocation(_ location: HyperTrack.Location) -> [String: Any] {
|
|
168
171
|
return [
|
|
169
172
|
keyType: typeLocation,
|
|
170
173
|
keyValue: [
|
|
@@ -174,49 +177,30 @@ private func serializeLocation(_ location: HyperTrack.Location) -> [String: Any]
|
|
|
174
177
|
]
|
|
175
178
|
}
|
|
176
179
|
|
|
177
|
-
func
|
|
178
|
-
switch
|
|
179
|
-
case
|
|
180
|
+
func serializeLocationError(_ error: HyperTrack.Location.Error) -> [String: Any] {
|
|
181
|
+
switch error {
|
|
182
|
+
case .starting:
|
|
180
183
|
return [
|
|
181
|
-
keyType:
|
|
182
|
-
keyValue: serializeLocation(success),
|
|
184
|
+
keyType: "starting",
|
|
183
185
|
]
|
|
184
|
-
case
|
|
185
|
-
var locationError: [String: Any]
|
|
186
|
-
switch failure {
|
|
187
|
-
case .starting:
|
|
188
|
-
locationError = [
|
|
189
|
-
keyType: "starting",
|
|
190
|
-
]
|
|
191
|
-
case .notRunning:
|
|
192
|
-
locationError = [
|
|
193
|
-
keyType: "notRunning",
|
|
194
|
-
]
|
|
195
|
-
case let .errors(errors):
|
|
196
|
-
locationError = [
|
|
197
|
-
keyType: "errors",
|
|
198
|
-
keyValue: serializeErrors(errors),
|
|
199
|
-
]
|
|
200
|
-
}
|
|
201
|
-
|
|
186
|
+
case .notRunning:
|
|
202
187
|
return [
|
|
203
|
-
keyType:
|
|
204
|
-
|
|
188
|
+
keyType: "notRunning",
|
|
189
|
+
]
|
|
190
|
+
case let .errors(errors):
|
|
191
|
+
return [
|
|
192
|
+
keyType: "errors",
|
|
193
|
+
keyValue: serializeErrors(errors),
|
|
205
194
|
]
|
|
206
195
|
}
|
|
207
196
|
}
|
|
208
197
|
|
|
209
|
-
func
|
|
210
|
-
_ result: Result<HyperTrack.LocationWithDeviation, HyperTrack.NoLocationError>
|
|
211
|
-
) -> [String: Any] {
|
|
198
|
+
func serializeLocationResult(_ result: Result<HyperTrack.Location, HyperTrack.Location.Error>) -> [String: Any] {
|
|
212
199
|
switch result {
|
|
213
200
|
case let .success(success):
|
|
214
201
|
return [
|
|
215
202
|
keyType: typeSuccess,
|
|
216
|
-
keyValue:
|
|
217
|
-
keyType: "locationWithDeviation",
|
|
218
|
-
keyValue: serializeLocationWithDeviation(success),
|
|
219
|
-
],
|
|
203
|
+
keyValue: serializeLocation(success),
|
|
220
204
|
]
|
|
221
205
|
case let .failure(failure):
|
|
222
206
|
return [
|
|
@@ -226,24 +210,6 @@ func serializeExpectedLocationResult(
|
|
|
226
210
|
}
|
|
227
211
|
}
|
|
228
212
|
|
|
229
|
-
func serializeLocationError(_ error: HyperTrack.NoLocationError) -> [String: Any] {
|
|
230
|
-
switch error {
|
|
231
|
-
case .starting:
|
|
232
|
-
return [
|
|
233
|
-
keyType: "starting",
|
|
234
|
-
]
|
|
235
|
-
case .notRunning:
|
|
236
|
-
return [
|
|
237
|
-
keyType: "notRunning",
|
|
238
|
-
]
|
|
239
|
-
case let .errors(errors):
|
|
240
|
-
return [
|
|
241
|
-
keyType: "errors",
|
|
242
|
-
keyValue: serializeErrors(errors),
|
|
243
|
-
]
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
|
|
247
213
|
func serializeLocationWithDeviation(
|
|
248
214
|
_ locationWithDeviation: HyperTrack.LocationWithDeviation
|
|
249
215
|
) -> [String: Any] {
|
|
@@ -253,95 +219,84 @@ func serializeLocationWithDeviation(
|
|
|
253
219
|
]
|
|
254
220
|
}
|
|
255
221
|
|
|
256
|
-
func
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
222
|
+
func serializeLocationWithDeviationResult(
|
|
223
|
+
_ result: Result<HyperTrack.LocationWithDeviation, HyperTrack.Location.Error>
|
|
224
|
+
) -> [String: Any] {
|
|
225
|
+
switch result {
|
|
226
|
+
case let .success(success):
|
|
227
|
+
return [
|
|
228
|
+
keyType: typeSuccess,
|
|
229
|
+
keyValue: [
|
|
230
|
+
keyType: "locationWithDeviation",
|
|
231
|
+
keyValue: serializeLocationWithDeviation(success),
|
|
263
232
|
],
|
|
264
|
-
]
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
keyValue: error.rawValue,
|
|
272
|
-
]
|
|
233
|
+
]
|
|
234
|
+
case let .failure(failure):
|
|
235
|
+
return [
|
|
236
|
+
keyType: typeFailure,
|
|
237
|
+
keyValue: serializeLocationError(failure),
|
|
238
|
+
]
|
|
239
|
+
}
|
|
273
240
|
}
|
|
274
241
|
|
|
275
|
-
func
|
|
242
|
+
func serializeMetadata(_ metadata: HyperTrack.JSON.Object) -> [String: Any] {
|
|
276
243
|
return [
|
|
277
|
-
keyType:
|
|
278
|
-
keyValue:
|
|
244
|
+
keyType: typeMetadata,
|
|
245
|
+
keyValue: toMap(metadata),
|
|
279
246
|
]
|
|
280
247
|
}
|
|
281
248
|
|
|
282
|
-
func
|
|
249
|
+
func serializeName(_ name: String) -> [String: Any] {
|
|
283
250
|
return [
|
|
284
|
-
keyType:
|
|
285
|
-
keyValue:
|
|
251
|
+
keyType: typeName,
|
|
252
|
+
keyValue: name,
|
|
286
253
|
]
|
|
287
254
|
}
|
|
288
255
|
|
|
289
|
-
func
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
}
|
|
293
|
-
guard let value = data[keyValue] as? String else {
|
|
294
|
-
return .failure(.fatalError(getParseError(data, key: keyValue)))
|
|
295
|
-
}
|
|
296
|
-
return .success(value)
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
func deserializeAvailability(_ data: [String: Any]) -> Result<Bool, FailureResult> {
|
|
300
|
-
if data[keyType] as? String != typeIsAvailable {
|
|
301
|
-
return .failure(.fatalError(getParseError(data, key: keyType)))
|
|
302
|
-
}
|
|
303
|
-
guard let value = data[keyValue] as? Bool else {
|
|
304
|
-
return .failure(.fatalError(getParseError(data, key: keyValue)))
|
|
256
|
+
func serializeErrors(_ errors: Set<HyperTrack.Error>) -> [[String: Any]] {
|
|
257
|
+
return errors.map { error in
|
|
258
|
+
serializeError(error)
|
|
305
259
|
}
|
|
306
|
-
return .success(value)
|
|
307
260
|
}
|
|
308
261
|
|
|
309
|
-
func
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
let
|
|
317
|
-
|
|
318
|
-
case let .
|
|
319
|
-
return
|
|
320
|
-
case let .
|
|
321
|
-
return
|
|
262
|
+
private func toMap(_ object: HyperTrack.JSON.Object) -> [String: Any] {
|
|
263
|
+
return object.mapValues { value in
|
|
264
|
+
switch value {
|
|
265
|
+
case let .object(objectValue):
|
|
266
|
+
return toMap(objectValue) as Any
|
|
267
|
+
case let .array(arr):
|
|
268
|
+
return toArray(arr)
|
|
269
|
+
case let .bool(bool):
|
|
270
|
+
return bool
|
|
271
|
+
case let .number(number):
|
|
272
|
+
return number
|
|
273
|
+
case let .string(string):
|
|
274
|
+
return string
|
|
275
|
+
case .null:
|
|
276
|
+
return NSNull()
|
|
322
277
|
}
|
|
323
|
-
} else {
|
|
324
|
-
return .success(.init(data: data, expectedLocation: nil))
|
|
325
278
|
}
|
|
326
279
|
}
|
|
327
280
|
|
|
328
|
-
func
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
281
|
+
private func toArray(_ array: [HyperTrack.JSON]) -> [Any] {
|
|
282
|
+
return array.map { (json: HyperTrack.JSON) -> Any in
|
|
283
|
+
switch json {
|
|
284
|
+
case let .object(objectValue):
|
|
285
|
+
return toMap(objectValue)
|
|
286
|
+
case let .array(arr):
|
|
287
|
+
return toArray(arr)
|
|
288
|
+
case let .bool(bool):
|
|
289
|
+
return bool
|
|
290
|
+
case let .number(number):
|
|
291
|
+
return number
|
|
292
|
+
case let .string(string):
|
|
293
|
+
return string
|
|
294
|
+
case .null:
|
|
295
|
+
return NSNull()
|
|
296
|
+
}
|
|
340
297
|
}
|
|
341
|
-
|
|
342
|
-
return .success(HyperTrack.Location(latitude: latitude, longitude: longitude))
|
|
343
298
|
}
|
|
344
299
|
|
|
345
|
-
func getParseError(_ data: Any, key: String) -> String {
|
|
300
|
+
private func getParseError(_ data: Any, key: String) -> String {
|
|
346
301
|
return "Invalid input for key \(key): \(data)"
|
|
347
302
|
}
|