hypertrack-sdk-react-native 10.0.3 → 11.0.0
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 +48 -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 +44 -80
- package/ios/common/SDKMethod.swift +13 -12
- package/ios/common/Serialization.swift +190 -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,82 @@
|
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
return
|
|
36
|
+
func deserializeIsAvailable(_ data: [String: Any]) -> Result<Bool, FailureResult> {
|
|
37
|
+
if data[keyType] as? String != typeIsAvailable {
|
|
38
|
+
return .failure(.fatalError(getParseError(data, key: keyType)))
|
|
39
|
+
}
|
|
40
|
+
guard let value = data[keyValue] as? Bool else {
|
|
41
|
+
return .failure(.fatalError(getParseError(data, key: keyValue)))
|
|
25
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 deserializeName(_ data: [String: Any]) -> Result<String, FailureResult> {
|
|
73
|
+
if data[keyType] as? String != typeName {
|
|
74
|
+
return .failure(.fatalError(getParseError(data, key: keyType)))
|
|
99
75
|
}
|
|
76
|
+
guard let value = data[keyValue] as? String else {
|
|
77
|
+
return .failure(.fatalError(getParseError(data, key: keyValue)))
|
|
78
|
+
}
|
|
79
|
+
return .success(value)
|
|
100
80
|
}
|
|
101
81
|
|
|
102
82
|
func serializeDeviceID(_ deviceID: String) -> [String: Any] {
|
|
@@ -106,65 +86,78 @@ func serializeDeviceID(_ deviceID: String) -> [String: Any] {
|
|
|
106
86
|
]
|
|
107
87
|
}
|
|
108
88
|
|
|
109
|
-
func
|
|
110
|
-
|
|
89
|
+
func serializeError(_ error: HyperTrack.Error) -> [String: Any] {
|
|
90
|
+
let value: String
|
|
91
|
+
switch error {
|
|
92
|
+
case .blockedFromRunning:
|
|
93
|
+
value = "blockedFromRunning"
|
|
94
|
+
case .invalidPublishableKey:
|
|
95
|
+
value = "invalidPublishableKey"
|
|
96
|
+
case let .location(location):
|
|
97
|
+
switch location {
|
|
98
|
+
case .mocked:
|
|
99
|
+
value = "location.mocked"
|
|
100
|
+
case .servicesDisabled:
|
|
101
|
+
value = "location.servicesDisabled"
|
|
102
|
+
case .signalLost:
|
|
103
|
+
value = "location.signalLost"
|
|
104
|
+
}
|
|
105
|
+
case let .permissions(permissionType):
|
|
106
|
+
switch permissionType {
|
|
107
|
+
case let .location(permission):
|
|
108
|
+
switch permission {
|
|
109
|
+
case .denied:
|
|
110
|
+
value = "permissions.location.denied"
|
|
111
|
+
case .insufficientForBackground:
|
|
112
|
+
value = "permissions.location.insufficientForBackground"
|
|
113
|
+
case .notDetermined:
|
|
114
|
+
value = "permissions.location.notDetermined"
|
|
115
|
+
case .provisional:
|
|
116
|
+
value = "permissions.location.provisional"
|
|
117
|
+
case .reducedAccuracy:
|
|
118
|
+
value = "permissions.location.reducedAccuracy"
|
|
119
|
+
case .restricted:
|
|
120
|
+
value = "permissions.location.restricted"
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return [
|
|
126
|
+
keyType: typeError,
|
|
127
|
+
keyValue: value,
|
|
128
|
+
]
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
func serializeIsAvailable(_ isAvailable: Bool) -> [String: Any] {
|
|
132
|
+
return [
|
|
133
|
+
keyType: typeIsAvailable,
|
|
134
|
+
keyValue: isAvailable,
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
func serializeIsTracking(_ isTracking: Bool) -> [String: Any] {
|
|
139
|
+
return [
|
|
140
|
+
keyType: typeIsTracking,
|
|
141
|
+
keyValue: isTracking,
|
|
142
|
+
]
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
func serializeLocateResult(_ locateResult: Result<HyperTrack.Location, Set<HyperTrack.Error>>) -> [String: Any] {
|
|
146
|
+
switch locateResult {
|
|
111
147
|
case let .success(success):
|
|
112
148
|
return [
|
|
113
149
|
keyType: typeSuccess,
|
|
114
|
-
keyValue:
|
|
115
|
-
keyType: typeLocation,
|
|
116
|
-
keyValue: [
|
|
117
|
-
"latitude": success.latitude,
|
|
118
|
-
"longitude": success.longitude,
|
|
119
|
-
],
|
|
120
|
-
],
|
|
150
|
+
keyValue: serializeLocation(success),
|
|
121
151
|
]
|
|
122
152
|
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
153
|
return [
|
|
161
154
|
keyType: typeFailure,
|
|
162
|
-
keyValue:
|
|
155
|
+
keyValue: serializeErrors(failure),
|
|
163
156
|
]
|
|
164
157
|
}
|
|
165
158
|
}
|
|
166
159
|
|
|
167
|
-
|
|
160
|
+
func serializeLocation(_ location: HyperTrack.Location) -> [String: Any] {
|
|
168
161
|
return [
|
|
169
162
|
keyType: typeLocation,
|
|
170
163
|
keyValue: [
|
|
@@ -174,49 +167,30 @@ private func serializeLocation(_ location: HyperTrack.Location) -> [String: Any]
|
|
|
174
167
|
]
|
|
175
168
|
}
|
|
176
169
|
|
|
177
|
-
func
|
|
178
|
-
switch
|
|
179
|
-
case
|
|
170
|
+
func serializeLocationError(_ error: HyperTrack.Location.Error) -> [String: Any] {
|
|
171
|
+
switch error {
|
|
172
|
+
case .starting:
|
|
180
173
|
return [
|
|
181
|
-
keyType:
|
|
182
|
-
keyValue: serializeLocation(success),
|
|
174
|
+
keyType: "starting",
|
|
183
175
|
]
|
|
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
|
-
|
|
176
|
+
case .notRunning:
|
|
202
177
|
return [
|
|
203
|
-
keyType:
|
|
204
|
-
|
|
178
|
+
keyType: "notRunning",
|
|
179
|
+
]
|
|
180
|
+
case let .errors(errors):
|
|
181
|
+
return [
|
|
182
|
+
keyType: "errors",
|
|
183
|
+
keyValue: serializeErrors(errors),
|
|
205
184
|
]
|
|
206
185
|
}
|
|
207
186
|
}
|
|
208
187
|
|
|
209
|
-
func
|
|
210
|
-
_ result: Result<HyperTrack.LocationWithDeviation, HyperTrack.NoLocationError>
|
|
211
|
-
) -> [String: Any] {
|
|
188
|
+
func serializeLocationResult(_ result: Result<HyperTrack.Location, HyperTrack.Location.Error>) -> [String: Any] {
|
|
212
189
|
switch result {
|
|
213
190
|
case let .success(success):
|
|
214
191
|
return [
|
|
215
192
|
keyType: typeSuccess,
|
|
216
|
-
keyValue:
|
|
217
|
-
keyType: "locationWithDeviation",
|
|
218
|
-
keyValue: serializeLocationWithDeviation(success),
|
|
219
|
-
],
|
|
193
|
+
keyValue: serializeLocation(success),
|
|
220
194
|
]
|
|
221
195
|
case let .failure(failure):
|
|
222
196
|
return [
|
|
@@ -226,24 +200,6 @@ func serializeExpectedLocationResult(
|
|
|
226
200
|
}
|
|
227
201
|
}
|
|
228
202
|
|
|
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
203
|
func serializeLocationWithDeviation(
|
|
248
204
|
_ locationWithDeviation: HyperTrack.LocationWithDeviation
|
|
249
205
|
) -> [String: Any] {
|
|
@@ -253,95 +209,84 @@ func serializeLocationWithDeviation(
|
|
|
253
209
|
]
|
|
254
210
|
}
|
|
255
211
|
|
|
256
|
-
func
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
212
|
+
func serializeLocationWithDeviationResult(
|
|
213
|
+
_ result: Result<HyperTrack.LocationWithDeviation, HyperTrack.Location.Error>
|
|
214
|
+
) -> [String: Any] {
|
|
215
|
+
switch result {
|
|
216
|
+
case let .success(success):
|
|
217
|
+
return [
|
|
218
|
+
keyType: typeSuccess,
|
|
219
|
+
keyValue: [
|
|
220
|
+
keyType: "locationWithDeviation",
|
|
221
|
+
keyValue: serializeLocationWithDeviation(success),
|
|
263
222
|
],
|
|
264
|
-
]
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
keyValue: error.rawValue,
|
|
272
|
-
]
|
|
223
|
+
]
|
|
224
|
+
case let .failure(failure):
|
|
225
|
+
return [
|
|
226
|
+
keyType: typeFailure,
|
|
227
|
+
keyValue: serializeLocationError(failure),
|
|
228
|
+
]
|
|
229
|
+
}
|
|
273
230
|
}
|
|
274
231
|
|
|
275
|
-
func
|
|
232
|
+
func serializeMetadata(_ metadata: HyperTrack.JSON.Object) -> [String: Any] {
|
|
276
233
|
return [
|
|
277
|
-
keyType:
|
|
278
|
-
keyValue:
|
|
234
|
+
keyType: typeMetadata,
|
|
235
|
+
keyValue: toMap(metadata),
|
|
279
236
|
]
|
|
280
237
|
}
|
|
281
238
|
|
|
282
|
-
func
|
|
239
|
+
func serializeName(_ name: String) -> [String: Any] {
|
|
283
240
|
return [
|
|
284
|
-
keyType:
|
|
285
|
-
keyValue:
|
|
241
|
+
keyType: typeName,
|
|
242
|
+
keyValue: name,
|
|
286
243
|
]
|
|
287
244
|
}
|
|
288
245
|
|
|
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)))
|
|
246
|
+
func serializeErrors(_ errors: Set<HyperTrack.Error>) -> [[String: Any]] {
|
|
247
|
+
return errors.map { error in
|
|
248
|
+
serializeError(error)
|
|
305
249
|
}
|
|
306
|
-
return .success(value)
|
|
307
250
|
}
|
|
308
251
|
|
|
309
|
-
func
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
let
|
|
317
|
-
|
|
318
|
-
case let .
|
|
319
|
-
return
|
|
320
|
-
case let .
|
|
321
|
-
return
|
|
252
|
+
private func toMap(_ object: HyperTrack.JSON.Object) -> [String: Any] {
|
|
253
|
+
return object.mapValues { value in
|
|
254
|
+
switch value {
|
|
255
|
+
case let .object(objectValue):
|
|
256
|
+
return toMap(objectValue) as Any
|
|
257
|
+
case let .array(arr):
|
|
258
|
+
return toArray(arr)
|
|
259
|
+
case let .bool(bool):
|
|
260
|
+
return bool
|
|
261
|
+
case let .number(number):
|
|
262
|
+
return number
|
|
263
|
+
case let .string(string):
|
|
264
|
+
return string
|
|
265
|
+
case .null:
|
|
266
|
+
return NSNull()
|
|
322
267
|
}
|
|
323
|
-
} else {
|
|
324
|
-
return .success(.init(data: data, expectedLocation: nil))
|
|
325
268
|
}
|
|
326
269
|
}
|
|
327
270
|
|
|
328
|
-
func
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
271
|
+
private func toArray(_ array: [HyperTrack.JSON]) -> [Any] {
|
|
272
|
+
return array.map { (json: HyperTrack.JSON) -> Any in
|
|
273
|
+
switch json {
|
|
274
|
+
case let .object(objectValue):
|
|
275
|
+
return toMap(objectValue)
|
|
276
|
+
case let .array(arr):
|
|
277
|
+
return toArray(arr)
|
|
278
|
+
case let .bool(bool):
|
|
279
|
+
return bool
|
|
280
|
+
case let .number(number):
|
|
281
|
+
return number
|
|
282
|
+
case let .string(string):
|
|
283
|
+
return string
|
|
284
|
+
case .null:
|
|
285
|
+
return NSNull()
|
|
286
|
+
}
|
|
340
287
|
}
|
|
341
|
-
|
|
342
|
-
return .success(HyperTrack.Location(latitude: latitude, longitude: longitude))
|
|
343
288
|
}
|
|
344
289
|
|
|
345
|
-
func getParseError(_ data: Any, key: String) -> String {
|
|
290
|
+
private func getParseError(_ data: Any, key: String) -> String {
|
|
346
291
|
return "Invalid input for key \(key): \(data)"
|
|
347
292
|
}
|