@tryterra/react-native 0.0.0-stage → 2.1.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/LICENSE +21 -0
- package/README.md +111 -2
- package/TerraReactNative.podspec +48 -0
- package/android/build.gradle +87 -0
- package/android/src/bridgeCore/kotlin/README.md +1 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/BridgeBootstrap.kt +133 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/BridgeHost.kt +32 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/Conversions.kt +468 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/LauncherSlots.kt +41 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/Rejections.kt +150 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/StreamRegistry.kt +77 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/TerraBridge.kt +86 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/TerraBridgeOpsImpl.kt +258 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/TerraBridgeStreamsImpl.kt +52 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/TokenBroker.kt +198 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/generated/BridgeErrors.kt +217 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/generated/BridgeOps.kt +493 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/generated/BridgeTypes.kt +897 -0
- package/android/src/healthConnectOnly/kotlin/co/tryterra/sdk/reactnative/TerraStores.kt +11 -0
- package/android/src/main/AndroidManifest.xml +24 -0
- package/android/src/main/java/co/tryterra/sdk/reactnative/TerraBridgeModule.kt +96 -0
- package/android/src/main/java/co/tryterra/sdk/reactnative/TerraReactNativePackage.kt +26 -0
- package/android/src/main/java/co/tryterra/sdk/reactnative/TerraStartup.kt +46 -0
- package/android/src/samsung/kotlin/co/tryterra/sdk/reactnative/TerraStores.kt +13 -0
- package/docs/availability.md +246 -0
- package/frameworks/TerraSDK.xcframework/Info.plist +48 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64/TerraSDK.framework/Info.plist +0 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios.abi.json +81513 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios.package.swiftinterface +2150 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios.private.swiftinterface +2150 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios.swiftinterface +2127 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64/TerraSDK.framework/PrivacyInfo.xcprivacy +96 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64/TerraSDK.framework/TerraSDK +0 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64/dSYMs/TerraSDK.framework.dSYM/Contents/Info.plist +20 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64/dSYMs/TerraSDK.framework.dSYM/Contents/Resources/DWARF/TerraSDK +0 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64/dSYMs/TerraSDK.framework.dSYM/Contents/Resources/Relocations/aarch64/TerraSDK.yml +6473 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Info.plist +0 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios-simulator.abi.json +81513 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios-simulator.package.swiftinterface +2150 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +2150 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios-simulator.swiftinterface +2127 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/x86_64-apple-ios-simulator.abi.json +81513 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/x86_64-apple-ios-simulator.package.swiftinterface +2150 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +2150 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +2127 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/PrivacyInfo.xcprivacy +96 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/TerraSDK +0 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/_CodeSignature/CodeResources +223 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/dSYMs/TerraSDK.framework.dSYM/Contents/Info.plist +20 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/dSYMs/TerraSDK.framework.dSYM/Contents/Resources/DWARF/TerraSDK +0 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/dSYMs/TerraSDK.framework.dSYM/Contents/Resources/Relocations/aarch64/TerraSDK.yml +6474 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/dSYMs/TerraSDK.framework.dSYM/Contents/Resources/Relocations/x86_64/TerraSDK.yml +6392 -0
- package/ios/TerraBridgeCore/BridgeBootstrap.swift +89 -0
- package/ios/TerraBridgeCore/BridgeHost.swift +13 -0
- package/ios/TerraBridgeCore/Conversions.swift +467 -0
- package/ios/TerraBridgeCore/Generated/BridgeErrors.swift +179 -0
- package/ios/TerraBridgeCore/Generated/BridgeOps.swift +795 -0
- package/ios/TerraBridgeCore/Generated/BridgeTypes.swift +1317 -0
- package/ios/TerraBridgeCore/Locked.swift +15 -0
- package/ios/TerraBridgeCore/README.md +1 -0
- package/ios/TerraBridgeCore/Rejections.swift +130 -0
- package/ios/TerraBridgeCore/RuntimeAttachment.swift +60 -0
- package/ios/TerraBridgeCore/StreamRegistry.swift +59 -0
- package/ios/TerraBridgeCore/TerraBridge.swift +122 -0
- package/ios/TerraBridgeCore/TerraBridgeOpsImpl.swift +254 -0
- package/ios/TerraBridgeCore/TerraBridgeStreamsImpl.swift +60 -0
- package/ios/TerraBridgeCore/TokenBroker.swift +147 -0
- package/ios/TerraBridgeModule.mm +79 -0
- package/ios/TerraBridgeModuleImpl.swift +49 -0
- package/ios/TerraReactNative.swift +19 -0
- package/lib/EndUser.d.ts +12 -0
- package/lib/EndUser.js +13 -0
- package/lib/NativeTerraBridge.d.ts +23 -0
- package/lib/NativeTerraBridge.js +13 -0
- package/lib/Terra.d.ts +154 -0
- package/lib/Terra.js +280 -0
- package/lib/TerraError.d.ts +42 -0
- package/lib/TerraError.js +95 -0
- package/lib/createTerra.d.ts +8 -0
- package/lib/createTerra.js +19 -0
- package/lib/generated/client.d.ts +92 -0
- package/lib/generated/client.js +196 -0
- package/lib/generated/codecs.d.ts +135 -0
- package/lib/generated/codecs.js +1358 -0
- package/lib/generated/errors.d.ts +13 -0
- package/lib/generated/errors.js +68 -0
- package/lib/generated/ops.d.ts +13 -0
- package/lib/generated/ops.js +137 -0
- package/lib/generated/streams.d.ts +23 -0
- package/lib/generated/streams.js +58 -0
- package/lib/generated/types.d.ts +481 -0
- package/lib/generated/types.js +92 -0
- package/lib/index.d.ts +29 -0
- package/lib/index.js +55 -0
- package/package.json +71 -4
- package/src/EndUser.ts +15 -0
- package/src/NativeTerraBridge.ts +27 -0
- package/src/Terra.ts +462 -0
- package/src/TerraError.ts +116 -0
- package/src/createTerra.ts +18 -0
- package/src/generated/client.ts +243 -0
- package/src/generated/codecs.ts +1287 -0
- package/src/generated/errors.ts +113 -0
- package/src/generated/ops.ts +197 -0
- package/src/generated/streams.ts +74 -0
- package/src/generated/types.ts +667 -0
- package/src/index.ts +52 -0
|
@@ -0,0 +1,1287 @@
|
|
|
1
|
+
// Generated from surface/terra-surface.json by surface/gen. Do not edit by hand.
|
|
2
|
+
// Regenerate with: node surface/gen/src/cli.ts generate
|
|
3
|
+
|
|
4
|
+
import type { Source, DataCategory, PermissionStatus, MotionContext, BackgroundRestrictionReason, DiagnosticsReason, DeviceKeyRevokeOutcome, FailureCode, WorkoutSchedulingStatus, EndUser, TimeRange, SleepStage, WorkoutActivity, DiagnosticsState, StreamMessage, SampleSource, Connection, HeartRateSample, StepCount, SleepSegment, Workout, HealthChange, WorkoutScope, HealthAccess, HeartRateEntry, StepEntry, SleepEntry, WorkoutEntry, BodyEntry, Nutrients, NutritionEntry, TerraErrorPayload, PlannedWorkout, TerraEvent, SupportReport, BootstrapState, TokenRequest, Empty, SourceRequest, RangeRequest, CategoryRequest, RecordIdRequest, ConnectRequest, PermissionRequest, PermissionGrant, TokenResolveRequest, TokenRejectRequest, TokenProviderRequest, MarkCompleteRequest, BoolResult, StatusResult, StatusesResult, RecordIdList, ConnectionList, HeartRateList, StepCountList, SleepSegmentList, WorkoutList, PlannedWorkoutList, WorkoutScheduling, LastDeliveryResult, HeartRateEntryList, BodyEntryList, StepEntryList, SleepEntryList, WorkoutEntryList, NutritionEntryList } from "./types";
|
|
5
|
+
|
|
6
|
+
function encodeInstant(value: Date): string {
|
|
7
|
+
return value.toISOString();
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
function decodeInstant(value: unknown, at: string): Date {
|
|
11
|
+
if (typeof value !== 'string') throw new TypeError(`${at}: expected an ISO 8601 string`);
|
|
12
|
+
// `new Date` reads a string with no offset as device-local time and shifts the instant.
|
|
13
|
+
if (!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/.test(value)) {
|
|
14
|
+
throw new TypeError(`${at}: not a millisecond UTC instant`);
|
|
15
|
+
}
|
|
16
|
+
const parsed = new Date(value);
|
|
17
|
+
if (Number.isNaN(parsed.getTime()) || parsed.toISOString() !== value) {
|
|
18
|
+
throw new TypeError(`${at}: not a valid instant`);
|
|
19
|
+
}
|
|
20
|
+
return parsed;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function asObject(value: unknown, at: string): Record<string, unknown> {
|
|
24
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
25
|
+
throw new TypeError(`${at}: expected an object`);
|
|
26
|
+
}
|
|
27
|
+
return value as Record<string, unknown>;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function asArray(value: unknown, at: string): readonly unknown[] {
|
|
31
|
+
if (!Array.isArray(value)) throw new TypeError(`${at}: expected an array`);
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Checked rather than cast.
|
|
37
|
+
*
|
|
38
|
+
* `value as number` on a string produces a `number`-typed value that is a string, and the
|
|
39
|
+
* failure then happens in the caller's arithmetic with no mention of the bridge. Rejecting at
|
|
40
|
+
* the boundary names the field that was wrong.
|
|
41
|
+
*/
|
|
42
|
+
function asNumber(value: unknown, at: string): number {
|
|
43
|
+
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
44
|
+
throw new TypeError(`${at}: expected a number`);
|
|
45
|
+
}
|
|
46
|
+
return value;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function asInteger(value: unknown, at: string): number {
|
|
50
|
+
if (typeof value !== 'number' || !Number.isInteger(value)) {
|
|
51
|
+
throw new TypeError(`${at}: expected an integer`);
|
|
52
|
+
}
|
|
53
|
+
return value;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function caseSet<T extends string>(items: readonly T[]): T[] {
|
|
57
|
+
return [...new Set(items)].sort();
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function asBoolean(value: unknown, at: string): boolean {
|
|
61
|
+
if (typeof value !== 'boolean') throw new TypeError(`${at}: expected a boolean`);
|
|
62
|
+
return value;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function asString(value: unknown, at: string): string {
|
|
66
|
+
if (typeof value !== 'string') throw new TypeError(`${at}: expected a string`);
|
|
67
|
+
return value;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function optional<T>(value: unknown, read: (value: unknown) => T): T | undefined {
|
|
71
|
+
return value === undefined || value === null ? undefined : read(value);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const SourceCases: ReadonlySet<string> = new Set(["health", "samsungHealth"]);
|
|
75
|
+
|
|
76
|
+
/** Narrows an untyped value to Source, or throws naming the field. */
|
|
77
|
+
export function asSource(value: unknown, at = "Source"): Source {
|
|
78
|
+
if (typeof value !== "string" || !SourceCases.has(value)) {
|
|
79
|
+
throw new TypeError(`${at}: ${String(value)} is not a Source`);
|
|
80
|
+
}
|
|
81
|
+
return value as Source;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const DataCategoryCases: ReadonlySet<string> = new Set(["activity", "body", "daily", "sleep", "nutrition"]);
|
|
85
|
+
|
|
86
|
+
/** Narrows an untyped value to DataCategory, or throws naming the field. */
|
|
87
|
+
export function asDataCategory(value: unknown, at = "DataCategory"): DataCategory {
|
|
88
|
+
if (typeof value !== "string" || !DataCategoryCases.has(value)) {
|
|
89
|
+
throw new TypeError(`${at}: ${String(value)} is not a DataCategory`);
|
|
90
|
+
}
|
|
91
|
+
return value as DataCategory;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const PermissionStatusCases: ReadonlySet<string> = new Set(["granted", "denied", "notDetermined", "notDisclosed", "unsupported", "unavailable"]);
|
|
95
|
+
|
|
96
|
+
/** Narrows an untyped value to PermissionStatus, or throws naming the field. */
|
|
97
|
+
export function asPermissionStatus(value: unknown, at = "PermissionStatus"): PermissionStatus {
|
|
98
|
+
if (typeof value !== "string" || !PermissionStatusCases.has(value)) {
|
|
99
|
+
throw new TypeError(`${at}: ${String(value)} is not a PermissionStatus`);
|
|
100
|
+
}
|
|
101
|
+
return value as PermissionStatus;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const MotionContextCases: ReadonlySet<string> = new Set(["unknown", "sedentary", "active"]);
|
|
105
|
+
|
|
106
|
+
/** Narrows an untyped value to MotionContext. A string it does not name is `unknown`; anything else throws. */
|
|
107
|
+
export function asMotionContext(value: unknown, at = "MotionContext"): MotionContext {
|
|
108
|
+
if (typeof value !== "string") {
|
|
109
|
+
throw new TypeError(`${at}: ${String(value)} is not a MotionContext`);
|
|
110
|
+
}
|
|
111
|
+
if (!MotionContextCases.has(value)) return "unknown";
|
|
112
|
+
return value as MotionContext;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const BackgroundRestrictionReasonCases: ReadonlySet<string> = new Set(["oemRestricted", "backgroundReadDenied", "healthConnectFeatureUnavailable", "storeFeatureUnavailable", "ticksNotRunning"]);
|
|
116
|
+
|
|
117
|
+
/** Narrows an untyped value to BackgroundRestrictionReason, or throws naming the field. */
|
|
118
|
+
export function asBackgroundRestrictionReason(value: unknown, at = "BackgroundRestrictionReason"): BackgroundRestrictionReason {
|
|
119
|
+
if (typeof value !== "string" || !BackgroundRestrictionReasonCases.has(value)) {
|
|
120
|
+
throw new TypeError(`${at}: ${String(value)} is not a BackgroundRestrictionReason`);
|
|
121
|
+
}
|
|
122
|
+
return value as BackgroundRestrictionReason;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const DiagnosticsReasonCases: ReadonlySet<string> = new Set(["uploadFailed", "backfillAbandoned", "backgroundObservationUnavailable", "backgroundRestricted", "backgroundRefreshUnscheduled", "quiet", "requested"]);
|
|
126
|
+
|
|
127
|
+
/** Narrows an untyped value to DiagnosticsReason, or throws naming the field. */
|
|
128
|
+
export function asDiagnosticsReason(value: unknown, at = "DiagnosticsReason"): DiagnosticsReason {
|
|
129
|
+
if (typeof value !== "string" || !DiagnosticsReasonCases.has(value)) {
|
|
130
|
+
throw new TypeError(`${at}: ${String(value)} is not a DiagnosticsReason`);
|
|
131
|
+
}
|
|
132
|
+
return value as DiagnosticsReason;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const DeviceKeyRevokeOutcomeCases: ReadonlySet<string> = new Set(["revoked", "alreadyRevoked", "routeAbsent"]);
|
|
136
|
+
|
|
137
|
+
/** Narrows an untyped value to DeviceKeyRevokeOutcome, or throws naming the field. */
|
|
138
|
+
export function asDeviceKeyRevokeOutcome(value: unknown, at = "DeviceKeyRevokeOutcome"): DeviceKeyRevokeOutcome {
|
|
139
|
+
if (typeof value !== "string" || !DeviceKeyRevokeOutcomeCases.has(value)) {
|
|
140
|
+
throw new TypeError(`${at}: ${String(value)} is not a DeviceKeyRevokeOutcome`);
|
|
141
|
+
}
|
|
142
|
+
return value as DeviceKeyRevokeOutcome;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
const FailureCodeCases: ReadonlySet<string> = new Set(["healthDataUnavailable", "notConnected", "tokenUnavailable", "tokenRejected", "tokenProviderFailed", "offline", "timedOut", "serverError", "transport", "malformedResponse", "userLimitReached", "upgradeRequired", "platform", "deviceKeyUnavailable", "signatureRejected", "linkRevoked", "linkConflict", "clockSkewed", "devIDMismatch", "syncAlreadyRunning", "linkAlreadyRunning", "storeLocked", "storeUnreadable", "deadlineExceeded", "permissionDenied", "authorizationNotDetermined", "sampleNotFound", "rollbackIncomplete", "distanceNotAttributable", "bloodPressureIncomplete", "authorizationUnavailableInExtension", "routeAwaitingConverter", "readQuotaExceeded", "plannedWorkoutUnnamed"]);
|
|
146
|
+
|
|
147
|
+
/** Narrows an untyped value to FailureCode, or throws naming the field. */
|
|
148
|
+
export function asFailureCode(value: unknown, at = "FailureCode"): FailureCode {
|
|
149
|
+
if (typeof value !== "string" || !FailureCodeCases.has(value)) {
|
|
150
|
+
throw new TypeError(`${at}: ${String(value)} is not a FailureCode`);
|
|
151
|
+
}
|
|
152
|
+
return value as FailureCode;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const WorkoutSchedulingStatusCases: ReadonlySet<string> = new Set(["unsupported", "notDetermined", "denied", "authorized"]);
|
|
156
|
+
|
|
157
|
+
/** Narrows an untyped value to WorkoutSchedulingStatus, or throws naming the field. */
|
|
158
|
+
export function asWorkoutSchedulingStatus(value: unknown, at = "WorkoutSchedulingStatus"): WorkoutSchedulingStatus {
|
|
159
|
+
if (typeof value !== "string" || !WorkoutSchedulingStatusCases.has(value)) {
|
|
160
|
+
throw new TypeError(`${at}: ${String(value)} is not a WorkoutSchedulingStatus`);
|
|
161
|
+
}
|
|
162
|
+
return value as WorkoutSchedulingStatus;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
export function encodeSampleSource(value: SampleSource): Record<string, unknown> {
|
|
166
|
+
const out: Record<string, unknown> = {};
|
|
167
|
+
out.name = value.name;
|
|
168
|
+
out.bundleId = value.bundleId;
|
|
169
|
+
if (value.productType !== undefined) out.productType = value.productType;
|
|
170
|
+
if (value.deviceType !== undefined) out.deviceType = value.deviceType;
|
|
171
|
+
return out;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
export function decodeSampleSource(raw: unknown, at$ = "SampleSource"): SampleSource {
|
|
175
|
+
const object = asObject(raw, at$);
|
|
176
|
+
const name = asString(object.name, `${at$}.name`);
|
|
177
|
+
const bundleId = asString(object.bundleId, `${at$}.bundleId`);
|
|
178
|
+
const productType = optional(object.productType, (value) => asString(value, `${at$}.productType`));
|
|
179
|
+
const deviceType = optional(object.deviceType, (value) => asString(value, `${at$}.deviceType`));
|
|
180
|
+
return { name, bundleId, productType, deviceType };
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export function encodeConnection(value: Connection): Record<string, unknown> {
|
|
184
|
+
const out: Record<string, unknown> = {};
|
|
185
|
+
out.source = value.source;
|
|
186
|
+
out.userId = value.userId;
|
|
187
|
+
if (value.providerUserId !== undefined) out.providerUserId = value.providerUserId;
|
|
188
|
+
return out;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
export function decodeConnection(raw: unknown, at$ = "Connection"): Connection {
|
|
192
|
+
const object = asObject(raw, at$);
|
|
193
|
+
const source = asSource(object.source, `${at$}.source`);
|
|
194
|
+
const userId = asString(object.userId, `${at$}.userId`);
|
|
195
|
+
const providerUserId = optional(object.providerUserId, (value) => asString(value, `${at$}.providerUserId`));
|
|
196
|
+
return { source, userId, providerUserId };
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
export function encodeHeartRateSample(value: HeartRateSample): Record<string, unknown> {
|
|
200
|
+
const out: Record<string, unknown> = {};
|
|
201
|
+
out.id = value.id;
|
|
202
|
+
out.time = encodeInstant(value.time);
|
|
203
|
+
out.beatsPerMinute = value.beatsPerMinute;
|
|
204
|
+
out.source = encodeSampleSource(value.source);
|
|
205
|
+
if (value.motionContext !== undefined) out.motionContext = value.motionContext;
|
|
206
|
+
out.userEntered = value.userEntered;
|
|
207
|
+
if (value.timeZone !== undefined) out.timeZone = value.timeZone;
|
|
208
|
+
return out;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
export function decodeHeartRateSample(raw: unknown, at$ = "HeartRateSample"): HeartRateSample {
|
|
212
|
+
const object = asObject(raw, at$);
|
|
213
|
+
const id = asString(object.id, `${at$}.id`);
|
|
214
|
+
const time = decodeInstant(object.time, `${at$}.time`);
|
|
215
|
+
const beatsPerMinute = asNumber(object.beatsPerMinute, `${at$}.beatsPerMinute`);
|
|
216
|
+
const source = decodeSampleSource(object.source, `${at$}.source`);
|
|
217
|
+
const motionContext = optional(object.motionContext, (value) => asMotionContext(value, `${at$}.motionContext`));
|
|
218
|
+
const userEntered = asBoolean(object.userEntered, `${at$}.userEntered`);
|
|
219
|
+
const timeZone = optional(object.timeZone, (value) => asString(value, `${at$}.timeZone`));
|
|
220
|
+
return { id, time, beatsPerMinute, source, motionContext, userEntered, timeZone };
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
export function encodeStepCount(value: StepCount): Record<string, unknown> {
|
|
224
|
+
const out: Record<string, unknown> = {};
|
|
225
|
+
if (value.id !== undefined) out.id = value.id;
|
|
226
|
+
out.start = encodeInstant(value.start);
|
|
227
|
+
out.end = encodeInstant(value.end);
|
|
228
|
+
out.steps = value.steps;
|
|
229
|
+
out.source = encodeSampleSource(value.source);
|
|
230
|
+
out.userEntered = value.userEntered;
|
|
231
|
+
if (value.timeZone !== undefined) out.timeZone = value.timeZone;
|
|
232
|
+
return out;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
export function decodeStepCount(raw: unknown, at$ = "StepCount"): StepCount {
|
|
236
|
+
const object = asObject(raw, at$);
|
|
237
|
+
const id = optional(object.id, (value) => asString(value, `${at$}.id`));
|
|
238
|
+
const start = decodeInstant(object.start, `${at$}.start`);
|
|
239
|
+
const end = decodeInstant(object.end, `${at$}.end`);
|
|
240
|
+
const steps = asInteger(object.steps, `${at$}.steps`);
|
|
241
|
+
const source = decodeSampleSource(object.source, `${at$}.source`);
|
|
242
|
+
const userEntered = asBoolean(object.userEntered, `${at$}.userEntered`);
|
|
243
|
+
const timeZone = optional(object.timeZone, (value) => asString(value, `${at$}.timeZone`));
|
|
244
|
+
return { id, start, end, steps, source, userEntered, timeZone };
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
export function encodeSleepSegment(value: SleepSegment): Record<string, unknown> {
|
|
248
|
+
const out: Record<string, unknown> = {};
|
|
249
|
+
out.id = value.id;
|
|
250
|
+
out.start = encodeInstant(value.start);
|
|
251
|
+
out.end = encodeInstant(value.end);
|
|
252
|
+
out.stage = encodeSleepStage(value.stage);
|
|
253
|
+
out.source = encodeSampleSource(value.source);
|
|
254
|
+
out.userEntered = value.userEntered;
|
|
255
|
+
if (value.timeZone !== undefined) out.timeZone = value.timeZone;
|
|
256
|
+
return out;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
export function decodeSleepSegment(raw: unknown, at$ = "SleepSegment"): SleepSegment {
|
|
260
|
+
const object = asObject(raw, at$);
|
|
261
|
+
const id = asString(object.id, `${at$}.id`);
|
|
262
|
+
const start = decodeInstant(object.start, `${at$}.start`);
|
|
263
|
+
const end = decodeInstant(object.end, `${at$}.end`);
|
|
264
|
+
const stage = decodeSleepStage(object.stage, `${at$}.stage`);
|
|
265
|
+
const source = decodeSampleSource(object.source, `${at$}.source`);
|
|
266
|
+
const userEntered = asBoolean(object.userEntered, `${at$}.userEntered`);
|
|
267
|
+
const timeZone = optional(object.timeZone, (value) => asString(value, `${at$}.timeZone`));
|
|
268
|
+
return { id, start, end, stage, source, userEntered, timeZone };
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
export function encodeWorkout(value: Workout): Record<string, unknown> {
|
|
272
|
+
const out: Record<string, unknown> = {};
|
|
273
|
+
out.id = value.id;
|
|
274
|
+
out.start = encodeInstant(value.start);
|
|
275
|
+
out.end = encodeInstant(value.end);
|
|
276
|
+
out.activity = encodeWorkoutActivity(value.activity);
|
|
277
|
+
out.activityTypeCode = value.activityTypeCode;
|
|
278
|
+
if (value.indoor !== undefined) out.indoor = value.indoor;
|
|
279
|
+
if (value.activeEnergyKilocalories !== undefined) out.activeEnergyKilocalories = value.activeEnergyKilocalories;
|
|
280
|
+
if (value.distanceMeters !== undefined) out.distanceMeters = value.distanceMeters;
|
|
281
|
+
out.source = encodeSampleSource(value.source);
|
|
282
|
+
out.userEntered = value.userEntered;
|
|
283
|
+
if (value.timeZone !== undefined) out.timeZone = value.timeZone;
|
|
284
|
+
return out;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
export function decodeWorkout(raw: unknown, at$ = "Workout"): Workout {
|
|
288
|
+
const object = asObject(raw, at$);
|
|
289
|
+
const id = asString(object.id, `${at$}.id`);
|
|
290
|
+
const start = decodeInstant(object.start, `${at$}.start`);
|
|
291
|
+
const end = decodeInstant(object.end, `${at$}.end`);
|
|
292
|
+
const activity = decodeWorkoutActivity(object.activity, `${at$}.activity`);
|
|
293
|
+
const activityTypeCode = asInteger(object.activityTypeCode, `${at$}.activityTypeCode`);
|
|
294
|
+
const indoor = optional(object.indoor, (value) => asBoolean(value, `${at$}.indoor`));
|
|
295
|
+
const activeEnergyKilocalories = optional(object.activeEnergyKilocalories, (value) => asNumber(value, `${at$}.activeEnergyKilocalories`));
|
|
296
|
+
const distanceMeters = optional(object.distanceMeters, (value) => asNumber(value, `${at$}.distanceMeters`));
|
|
297
|
+
const source = decodeSampleSource(object.source, `${at$}.source`);
|
|
298
|
+
const userEntered = asBoolean(object.userEntered, `${at$}.userEntered`);
|
|
299
|
+
const timeZone = optional(object.timeZone, (value) => asString(value, `${at$}.timeZone`));
|
|
300
|
+
return { id, start, end, activity, activityTypeCode, indoor, activeEnergyKilocalories, distanceMeters, source, userEntered, timeZone };
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
export function encodeHealthChange(value: HealthChange): Record<string, unknown> {
|
|
304
|
+
const out: Record<string, unknown> = {};
|
|
305
|
+
out.category = value.category;
|
|
306
|
+
out.day = value.day;
|
|
307
|
+
return out;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
export function decodeHealthChange(raw: unknown, at$ = "HealthChange"): HealthChange {
|
|
311
|
+
const object = asObject(raw, at$);
|
|
312
|
+
const category = asDataCategory(object.category, `${at$}.category`);
|
|
313
|
+
const day = asString(object.day, `${at$}.day`);
|
|
314
|
+
return { category, day };
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
export function encodeWorkoutScope(value: WorkoutScope): Record<string, unknown> {
|
|
318
|
+
const out: Record<string, unknown> = {};
|
|
319
|
+
out.activity = encodeWorkoutActivity(value.activity);
|
|
320
|
+
out.energy = value.energy;
|
|
321
|
+
out.distance = value.distance;
|
|
322
|
+
return out;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
export function decodeWorkoutScope(raw: unknown, at$ = "WorkoutScope"): WorkoutScope {
|
|
326
|
+
const object = asObject(raw, at$);
|
|
327
|
+
const activity = decodeWorkoutActivity(object.activity, `${at$}.activity`);
|
|
328
|
+
const energy = asBoolean(object.energy, `${at$}.energy`);
|
|
329
|
+
const distance = asBoolean(object.distance, `${at$}.distance`);
|
|
330
|
+
return { activity, energy, distance };
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
export function encodeHealthAccess(value: HealthAccess): Record<string, unknown> {
|
|
334
|
+
const out: Record<string, unknown> = {};
|
|
335
|
+
out.read = caseSet(value.read);
|
|
336
|
+
out.write = caseSet(value.write);
|
|
337
|
+
out.workouts = value.workouts.map((item) => encodeWorkoutScope(item));
|
|
338
|
+
return out;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
export function decodeHealthAccess(raw: unknown, at$ = "HealthAccess"): HealthAccess {
|
|
342
|
+
const object = asObject(raw, at$);
|
|
343
|
+
const read = caseSet(asArray(object.read, `${at$}.read`).map((item, index) => asDataCategory(item, `${`${at$}.read`}[${index}]`)));
|
|
344
|
+
const write = caseSet(asArray(object.write, `${at$}.write`).map((item, index) => asDataCategory(item, `${`${at$}.write`}[${index}]`)));
|
|
345
|
+
const workouts = asArray(object.workouts, `${at$}.workouts`).map((item, index) => decodeWorkoutScope(item, `${`${at$}.workouts`}[${index}]`));
|
|
346
|
+
return { read, write, workouts };
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
export function encodeHeartRateEntry(value: HeartRateEntry): Record<string, unknown> {
|
|
350
|
+
const out: Record<string, unknown> = {};
|
|
351
|
+
out.time = encodeInstant(value.time);
|
|
352
|
+
out.beatsPerMinute = value.beatsPerMinute;
|
|
353
|
+
if (value.recordId !== undefined) out.recordId = value.recordId;
|
|
354
|
+
return out;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
export function decodeHeartRateEntry(raw: unknown, at$ = "HeartRateEntry"): HeartRateEntry {
|
|
358
|
+
const object = asObject(raw, at$);
|
|
359
|
+
const time = decodeInstant(object.time, `${at$}.time`);
|
|
360
|
+
const beatsPerMinute = asNumber(object.beatsPerMinute, `${at$}.beatsPerMinute`);
|
|
361
|
+
const recordId = optional(object.recordId, (value) => asString(value, `${at$}.recordId`));
|
|
362
|
+
return { time, beatsPerMinute, recordId };
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
export function encodeStepEntry(value: StepEntry): Record<string, unknown> {
|
|
366
|
+
const out: Record<string, unknown> = {};
|
|
367
|
+
out.start = encodeInstant(value.start);
|
|
368
|
+
out.end = encodeInstant(value.end);
|
|
369
|
+
out.steps = value.steps;
|
|
370
|
+
if (value.recordId !== undefined) out.recordId = value.recordId;
|
|
371
|
+
return out;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
export function decodeStepEntry(raw: unknown, at$ = "StepEntry"): StepEntry {
|
|
375
|
+
const object = asObject(raw, at$);
|
|
376
|
+
const start = decodeInstant(object.start, `${at$}.start`);
|
|
377
|
+
const end = decodeInstant(object.end, `${at$}.end`);
|
|
378
|
+
const steps = asInteger(object.steps, `${at$}.steps`);
|
|
379
|
+
const recordId = optional(object.recordId, (value) => asString(value, `${at$}.recordId`));
|
|
380
|
+
return { start, end, steps, recordId };
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
export function encodeSleepEntry(value: SleepEntry): Record<string, unknown> {
|
|
384
|
+
const out: Record<string, unknown> = {};
|
|
385
|
+
out.start = encodeInstant(value.start);
|
|
386
|
+
out.end = encodeInstant(value.end);
|
|
387
|
+
out.stage = encodeSleepStage(value.stage);
|
|
388
|
+
if (value.recordId !== undefined) out.recordId = value.recordId;
|
|
389
|
+
return out;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
export function decodeSleepEntry(raw: unknown, at$ = "SleepEntry"): SleepEntry {
|
|
393
|
+
const object = asObject(raw, at$);
|
|
394
|
+
const start = decodeInstant(object.start, `${at$}.start`);
|
|
395
|
+
const end = decodeInstant(object.end, `${at$}.end`);
|
|
396
|
+
const stage = decodeSleepStage(object.stage, `${at$}.stage`);
|
|
397
|
+
const recordId = optional(object.recordId, (value) => asString(value, `${at$}.recordId`));
|
|
398
|
+
return { start, end, stage, recordId };
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
export function encodeWorkoutEntry(value: WorkoutEntry): Record<string, unknown> {
|
|
402
|
+
const out: Record<string, unknown> = {};
|
|
403
|
+
out.start = encodeInstant(value.start);
|
|
404
|
+
out.end = encodeInstant(value.end);
|
|
405
|
+
out.activity = encodeWorkoutActivity(value.activity);
|
|
406
|
+
if (value.totalEnergyKilocalories !== undefined) out.totalEnergyKilocalories = value.totalEnergyKilocalories;
|
|
407
|
+
if (value.totalDistanceMeters !== undefined) out.totalDistanceMeters = value.totalDistanceMeters;
|
|
408
|
+
if (value.recordId !== undefined) out.recordId = value.recordId;
|
|
409
|
+
return out;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
export function decodeWorkoutEntry(raw: unknown, at$ = "WorkoutEntry"): WorkoutEntry {
|
|
413
|
+
const object = asObject(raw, at$);
|
|
414
|
+
const start = decodeInstant(object.start, `${at$}.start`);
|
|
415
|
+
const end = decodeInstant(object.end, `${at$}.end`);
|
|
416
|
+
const activity = decodeWorkoutActivity(object.activity, `${at$}.activity`);
|
|
417
|
+
const totalEnergyKilocalories = optional(object.totalEnergyKilocalories, (value) => asNumber(value, `${at$}.totalEnergyKilocalories`));
|
|
418
|
+
const totalDistanceMeters = optional(object.totalDistanceMeters, (value) => asNumber(value, `${at$}.totalDistanceMeters`));
|
|
419
|
+
const recordId = optional(object.recordId, (value) => asString(value, `${at$}.recordId`));
|
|
420
|
+
return { start, end, activity, totalEnergyKilocalories, totalDistanceMeters, recordId };
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
export function encodeBodyEntry(value: BodyEntry): Record<string, unknown> {
|
|
424
|
+
const out: Record<string, unknown> = {};
|
|
425
|
+
out.time = encodeInstant(value.time);
|
|
426
|
+
if (value.bodyMassKilograms !== undefined) out.bodyMassKilograms = value.bodyMassKilograms;
|
|
427
|
+
if (value.bodyFatPercent !== undefined) out.bodyFatPercent = value.bodyFatPercent;
|
|
428
|
+
if (value.bodyMassIndex !== undefined) out.bodyMassIndex = value.bodyMassIndex;
|
|
429
|
+
if (value.heightMeters !== undefined) out.heightMeters = value.heightMeters;
|
|
430
|
+
if (value.leanBodyMassKilograms !== undefined) out.leanBodyMassKilograms = value.leanBodyMassKilograms;
|
|
431
|
+
if (value.bodyTemperatureCelsius !== undefined) out.bodyTemperatureCelsius = value.bodyTemperatureCelsius;
|
|
432
|
+
if (value.oxygenSaturationPercent !== undefined) out.oxygenSaturationPercent = value.oxygenSaturationPercent;
|
|
433
|
+
if (value.bloodGlucoseMilligramsPerDeciliter !== undefined) out.bloodGlucoseMilligramsPerDeciliter = value.bloodGlucoseMilligramsPerDeciliter;
|
|
434
|
+
if (value.bloodPressureSystolicMillimetersOfMercury !== undefined) out.bloodPressureSystolicMillimetersOfMercury = value.bloodPressureSystolicMillimetersOfMercury;
|
|
435
|
+
if (value.bloodPressureDiastolicMillimetersOfMercury !== undefined) out.bloodPressureDiastolicMillimetersOfMercury = value.bloodPressureDiastolicMillimetersOfMercury;
|
|
436
|
+
if (value.recordId !== undefined) out.recordId = value.recordId;
|
|
437
|
+
return out;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
export function decodeBodyEntry(raw: unknown, at$ = "BodyEntry"): BodyEntry {
|
|
441
|
+
const object = asObject(raw, at$);
|
|
442
|
+
const time = decodeInstant(object.time, `${at$}.time`);
|
|
443
|
+
const bodyMassKilograms = optional(object.bodyMassKilograms, (value) => asNumber(value, `${at$}.bodyMassKilograms`));
|
|
444
|
+
const bodyFatPercent = optional(object.bodyFatPercent, (value) => asNumber(value, `${at$}.bodyFatPercent`));
|
|
445
|
+
const bodyMassIndex = optional(object.bodyMassIndex, (value) => asNumber(value, `${at$}.bodyMassIndex`));
|
|
446
|
+
const heightMeters = optional(object.heightMeters, (value) => asNumber(value, `${at$}.heightMeters`));
|
|
447
|
+
const leanBodyMassKilograms = optional(object.leanBodyMassKilograms, (value) => asNumber(value, `${at$}.leanBodyMassKilograms`));
|
|
448
|
+
const bodyTemperatureCelsius = optional(object.bodyTemperatureCelsius, (value) => asNumber(value, `${at$}.bodyTemperatureCelsius`));
|
|
449
|
+
const oxygenSaturationPercent = optional(object.oxygenSaturationPercent, (value) => asNumber(value, `${at$}.oxygenSaturationPercent`));
|
|
450
|
+
const bloodGlucoseMilligramsPerDeciliter = optional(object.bloodGlucoseMilligramsPerDeciliter, (value) => asNumber(value, `${at$}.bloodGlucoseMilligramsPerDeciliter`));
|
|
451
|
+
const bloodPressureSystolicMillimetersOfMercury = optional(object.bloodPressureSystolicMillimetersOfMercury, (value) => asNumber(value, `${at$}.bloodPressureSystolicMillimetersOfMercury`));
|
|
452
|
+
const bloodPressureDiastolicMillimetersOfMercury = optional(object.bloodPressureDiastolicMillimetersOfMercury, (value) => asNumber(value, `${at$}.bloodPressureDiastolicMillimetersOfMercury`));
|
|
453
|
+
const recordId = optional(object.recordId, (value) => asString(value, `${at$}.recordId`));
|
|
454
|
+
return { time, bodyMassKilograms, bodyFatPercent, bodyMassIndex, heightMeters, leanBodyMassKilograms, bodyTemperatureCelsius, oxygenSaturationPercent, bloodGlucoseMilligramsPerDeciliter, bloodPressureSystolicMillimetersOfMercury, bloodPressureDiastolicMillimetersOfMercury, recordId };
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
export function encodeNutrients(value: Nutrients): Record<string, unknown> {
|
|
458
|
+
const out: Record<string, unknown> = {};
|
|
459
|
+
if (value.energyKilocalories !== undefined) out.energyKilocalories = value.energyKilocalories;
|
|
460
|
+
if (value.proteinGrams !== undefined) out.proteinGrams = value.proteinGrams;
|
|
461
|
+
if (value.carbohydratesGrams !== undefined) out.carbohydratesGrams = value.carbohydratesGrams;
|
|
462
|
+
if (value.fiberGrams !== undefined) out.fiberGrams = value.fiberGrams;
|
|
463
|
+
if (value.sugarGrams !== undefined) out.sugarGrams = value.sugarGrams;
|
|
464
|
+
if (value.fatTotalGrams !== undefined) out.fatTotalGrams = value.fatTotalGrams;
|
|
465
|
+
if (value.fatSaturatedGrams !== undefined) out.fatSaturatedGrams = value.fatSaturatedGrams;
|
|
466
|
+
if (value.fatMonounsaturatedGrams !== undefined) out.fatMonounsaturatedGrams = value.fatMonounsaturatedGrams;
|
|
467
|
+
if (value.fatPolyunsaturatedGrams !== undefined) out.fatPolyunsaturatedGrams = value.fatPolyunsaturatedGrams;
|
|
468
|
+
if (value.cholesterolMilligrams !== undefined) out.cholesterolMilligrams = value.cholesterolMilligrams;
|
|
469
|
+
if (value.sodiumMilligrams !== undefined) out.sodiumMilligrams = value.sodiumMilligrams;
|
|
470
|
+
if (value.potassiumMilligrams !== undefined) out.potassiumMilligrams = value.potassiumMilligrams;
|
|
471
|
+
if (value.calciumMilligrams !== undefined) out.calciumMilligrams = value.calciumMilligrams;
|
|
472
|
+
if (value.ironMilligrams !== undefined) out.ironMilligrams = value.ironMilligrams;
|
|
473
|
+
if (value.magnesiumMilligrams !== undefined) out.magnesiumMilligrams = value.magnesiumMilligrams;
|
|
474
|
+
if (value.zincMilligrams !== undefined) out.zincMilligrams = value.zincMilligrams;
|
|
475
|
+
if (value.waterLiters !== undefined) out.waterLiters = value.waterLiters;
|
|
476
|
+
if (value.caffeineMilligrams !== undefined) out.caffeineMilligrams = value.caffeineMilligrams;
|
|
477
|
+
if (value.vitaminAMicrograms !== undefined) out.vitaminAMicrograms = value.vitaminAMicrograms;
|
|
478
|
+
if (value.vitaminCMilligrams !== undefined) out.vitaminCMilligrams = value.vitaminCMilligrams;
|
|
479
|
+
if (value.vitaminDMicrograms !== undefined) out.vitaminDMicrograms = value.vitaminDMicrograms;
|
|
480
|
+
if (value.vitaminEMilligrams !== undefined) out.vitaminEMilligrams = value.vitaminEMilligrams;
|
|
481
|
+
if (value.vitaminKMicrograms !== undefined) out.vitaminKMicrograms = value.vitaminKMicrograms;
|
|
482
|
+
if (value.vitaminB6Milligrams !== undefined) out.vitaminB6Milligrams = value.vitaminB6Milligrams;
|
|
483
|
+
if (value.vitaminB12Micrograms !== undefined) out.vitaminB12Micrograms = value.vitaminB12Micrograms;
|
|
484
|
+
if (value.folateMicrograms !== undefined) out.folateMicrograms = value.folateMicrograms;
|
|
485
|
+
if (value.thiaminMilligrams !== undefined) out.thiaminMilligrams = value.thiaminMilligrams;
|
|
486
|
+
if (value.riboflavinMilligrams !== undefined) out.riboflavinMilligrams = value.riboflavinMilligrams;
|
|
487
|
+
if (value.niacinMilligrams !== undefined) out.niacinMilligrams = value.niacinMilligrams;
|
|
488
|
+
if (value.biotinMicrograms !== undefined) out.biotinMicrograms = value.biotinMicrograms;
|
|
489
|
+
if (value.pantothenicAcidMilligrams !== undefined) out.pantothenicAcidMilligrams = value.pantothenicAcidMilligrams;
|
|
490
|
+
if (value.phosphorusMilligrams !== undefined) out.phosphorusMilligrams = value.phosphorusMilligrams;
|
|
491
|
+
if (value.iodineMicrograms !== undefined) out.iodineMicrograms = value.iodineMicrograms;
|
|
492
|
+
if (value.chromiumMicrograms !== undefined) out.chromiumMicrograms = value.chromiumMicrograms;
|
|
493
|
+
if (value.copperMilligrams !== undefined) out.copperMilligrams = value.copperMilligrams;
|
|
494
|
+
if (value.manganeseMilligrams !== undefined) out.manganeseMilligrams = value.manganeseMilligrams;
|
|
495
|
+
if (value.molybdenumMicrograms !== undefined) out.molybdenumMicrograms = value.molybdenumMicrograms;
|
|
496
|
+
if (value.seleniumMicrograms !== undefined) out.seleniumMicrograms = value.seleniumMicrograms;
|
|
497
|
+
if (value.chlorideMilligrams !== undefined) out.chlorideMilligrams = value.chlorideMilligrams;
|
|
498
|
+
return out;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
export function decodeNutrients(raw: unknown, at$ = "Nutrients"): Nutrients {
|
|
502
|
+
const object = asObject(raw, at$);
|
|
503
|
+
const energyKilocalories = optional(object.energyKilocalories, (value) => asNumber(value, `${at$}.energyKilocalories`));
|
|
504
|
+
const proteinGrams = optional(object.proteinGrams, (value) => asNumber(value, `${at$}.proteinGrams`));
|
|
505
|
+
const carbohydratesGrams = optional(object.carbohydratesGrams, (value) => asNumber(value, `${at$}.carbohydratesGrams`));
|
|
506
|
+
const fiberGrams = optional(object.fiberGrams, (value) => asNumber(value, `${at$}.fiberGrams`));
|
|
507
|
+
const sugarGrams = optional(object.sugarGrams, (value) => asNumber(value, `${at$}.sugarGrams`));
|
|
508
|
+
const fatTotalGrams = optional(object.fatTotalGrams, (value) => asNumber(value, `${at$}.fatTotalGrams`));
|
|
509
|
+
const fatSaturatedGrams = optional(object.fatSaturatedGrams, (value) => asNumber(value, `${at$}.fatSaturatedGrams`));
|
|
510
|
+
const fatMonounsaturatedGrams = optional(object.fatMonounsaturatedGrams, (value) => asNumber(value, `${at$}.fatMonounsaturatedGrams`));
|
|
511
|
+
const fatPolyunsaturatedGrams = optional(object.fatPolyunsaturatedGrams, (value) => asNumber(value, `${at$}.fatPolyunsaturatedGrams`));
|
|
512
|
+
const cholesterolMilligrams = optional(object.cholesterolMilligrams, (value) => asNumber(value, `${at$}.cholesterolMilligrams`));
|
|
513
|
+
const sodiumMilligrams = optional(object.sodiumMilligrams, (value) => asNumber(value, `${at$}.sodiumMilligrams`));
|
|
514
|
+
const potassiumMilligrams = optional(object.potassiumMilligrams, (value) => asNumber(value, `${at$}.potassiumMilligrams`));
|
|
515
|
+
const calciumMilligrams = optional(object.calciumMilligrams, (value) => asNumber(value, `${at$}.calciumMilligrams`));
|
|
516
|
+
const ironMilligrams = optional(object.ironMilligrams, (value) => asNumber(value, `${at$}.ironMilligrams`));
|
|
517
|
+
const magnesiumMilligrams = optional(object.magnesiumMilligrams, (value) => asNumber(value, `${at$}.magnesiumMilligrams`));
|
|
518
|
+
const zincMilligrams = optional(object.zincMilligrams, (value) => asNumber(value, `${at$}.zincMilligrams`));
|
|
519
|
+
const waterLiters = optional(object.waterLiters, (value) => asNumber(value, `${at$}.waterLiters`));
|
|
520
|
+
const caffeineMilligrams = optional(object.caffeineMilligrams, (value) => asNumber(value, `${at$}.caffeineMilligrams`));
|
|
521
|
+
const vitaminAMicrograms = optional(object.vitaminAMicrograms, (value) => asNumber(value, `${at$}.vitaminAMicrograms`));
|
|
522
|
+
const vitaminCMilligrams = optional(object.vitaminCMilligrams, (value) => asNumber(value, `${at$}.vitaminCMilligrams`));
|
|
523
|
+
const vitaminDMicrograms = optional(object.vitaminDMicrograms, (value) => asNumber(value, `${at$}.vitaminDMicrograms`));
|
|
524
|
+
const vitaminEMilligrams = optional(object.vitaminEMilligrams, (value) => asNumber(value, `${at$}.vitaminEMilligrams`));
|
|
525
|
+
const vitaminKMicrograms = optional(object.vitaminKMicrograms, (value) => asNumber(value, `${at$}.vitaminKMicrograms`));
|
|
526
|
+
const vitaminB6Milligrams = optional(object.vitaminB6Milligrams, (value) => asNumber(value, `${at$}.vitaminB6Milligrams`));
|
|
527
|
+
const vitaminB12Micrograms = optional(object.vitaminB12Micrograms, (value) => asNumber(value, `${at$}.vitaminB12Micrograms`));
|
|
528
|
+
const folateMicrograms = optional(object.folateMicrograms, (value) => asNumber(value, `${at$}.folateMicrograms`));
|
|
529
|
+
const thiaminMilligrams = optional(object.thiaminMilligrams, (value) => asNumber(value, `${at$}.thiaminMilligrams`));
|
|
530
|
+
const riboflavinMilligrams = optional(object.riboflavinMilligrams, (value) => asNumber(value, `${at$}.riboflavinMilligrams`));
|
|
531
|
+
const niacinMilligrams = optional(object.niacinMilligrams, (value) => asNumber(value, `${at$}.niacinMilligrams`));
|
|
532
|
+
const biotinMicrograms = optional(object.biotinMicrograms, (value) => asNumber(value, `${at$}.biotinMicrograms`));
|
|
533
|
+
const pantothenicAcidMilligrams = optional(object.pantothenicAcidMilligrams, (value) => asNumber(value, `${at$}.pantothenicAcidMilligrams`));
|
|
534
|
+
const phosphorusMilligrams = optional(object.phosphorusMilligrams, (value) => asNumber(value, `${at$}.phosphorusMilligrams`));
|
|
535
|
+
const iodineMicrograms = optional(object.iodineMicrograms, (value) => asNumber(value, `${at$}.iodineMicrograms`));
|
|
536
|
+
const chromiumMicrograms = optional(object.chromiumMicrograms, (value) => asNumber(value, `${at$}.chromiumMicrograms`));
|
|
537
|
+
const copperMilligrams = optional(object.copperMilligrams, (value) => asNumber(value, `${at$}.copperMilligrams`));
|
|
538
|
+
const manganeseMilligrams = optional(object.manganeseMilligrams, (value) => asNumber(value, `${at$}.manganeseMilligrams`));
|
|
539
|
+
const molybdenumMicrograms = optional(object.molybdenumMicrograms, (value) => asNumber(value, `${at$}.molybdenumMicrograms`));
|
|
540
|
+
const seleniumMicrograms = optional(object.seleniumMicrograms, (value) => asNumber(value, `${at$}.seleniumMicrograms`));
|
|
541
|
+
const chlorideMilligrams = optional(object.chlorideMilligrams, (value) => asNumber(value, `${at$}.chlorideMilligrams`));
|
|
542
|
+
return { energyKilocalories, proteinGrams, carbohydratesGrams, fiberGrams, sugarGrams, fatTotalGrams, fatSaturatedGrams, fatMonounsaturatedGrams, fatPolyunsaturatedGrams, cholesterolMilligrams, sodiumMilligrams, potassiumMilligrams, calciumMilligrams, ironMilligrams, magnesiumMilligrams, zincMilligrams, waterLiters, caffeineMilligrams, vitaminAMicrograms, vitaminCMilligrams, vitaminDMicrograms, vitaminEMilligrams, vitaminKMicrograms, vitaminB6Milligrams, vitaminB12Micrograms, folateMicrograms, thiaminMilligrams, riboflavinMilligrams, niacinMilligrams, biotinMicrograms, pantothenicAcidMilligrams, phosphorusMilligrams, iodineMicrograms, chromiumMicrograms, copperMilligrams, manganeseMilligrams, molybdenumMicrograms, seleniumMicrograms, chlorideMilligrams };
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
export function encodeNutritionEntry(value: NutritionEntry): Record<string, unknown> {
|
|
546
|
+
const out: Record<string, unknown> = {};
|
|
547
|
+
out.start = encodeInstant(value.start);
|
|
548
|
+
out.end = encodeInstant(value.end);
|
|
549
|
+
if (value.name !== undefined) out.name = value.name;
|
|
550
|
+
out.nutrients = encodeNutrients(value.nutrients);
|
|
551
|
+
if (value.recordId !== undefined) out.recordId = value.recordId;
|
|
552
|
+
return out;
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
export function decodeNutritionEntry(raw: unknown, at$ = "NutritionEntry"): NutritionEntry {
|
|
556
|
+
const object = asObject(raw, at$);
|
|
557
|
+
const start = decodeInstant(object.start, `${at$}.start`);
|
|
558
|
+
const end = decodeInstant(object.end, `${at$}.end`);
|
|
559
|
+
const name = optional(object.name, (value) => asString(value, `${at$}.name`));
|
|
560
|
+
const nutrients = decodeNutrients(object.nutrients, `${at$}.nutrients`);
|
|
561
|
+
const recordId = optional(object.recordId, (value) => asString(value, `${at$}.recordId`));
|
|
562
|
+
return { start, end, name, nutrients, recordId };
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
export function encodeTerraErrorPayload(value: TerraErrorPayload): Record<string, unknown> {
|
|
566
|
+
const out: Record<string, unknown> = {};
|
|
567
|
+
out.code = value.code;
|
|
568
|
+
out.retryable = value.retryable;
|
|
569
|
+
out.message = value.message;
|
|
570
|
+
if (value.source !== undefined) out.source = value.source;
|
|
571
|
+
if (value.details !== undefined) out.details = value.details;
|
|
572
|
+
return out;
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
export function decodeTerraErrorPayload(raw: unknown, at$ = "TerraErrorPayload"): TerraErrorPayload {
|
|
576
|
+
const object = asObject(raw, at$);
|
|
577
|
+
const code = asString(object.code, `${at$}.code`);
|
|
578
|
+
const retryable = asBoolean(object.retryable, `${at$}.retryable`);
|
|
579
|
+
const message = asString(object.message, `${at$}.message`);
|
|
580
|
+
const source = optional(object.source, (value) => asSource(value, `${at$}.source`));
|
|
581
|
+
const details = optional(object.details, (value) => asObject(value, `${at$}.details`));
|
|
582
|
+
return { code, retryable, message, source, details };
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
export function encodePlannedWorkout(value: PlannedWorkout): Record<string, unknown> {
|
|
586
|
+
const out: Record<string, unknown> = {};
|
|
587
|
+
out.id = value.id;
|
|
588
|
+
out.plannedOn = value.plannedOn;
|
|
589
|
+
out.activity = encodeWorkoutActivity(value.activity);
|
|
590
|
+
if (value.title !== undefined) out.title = value.title;
|
|
591
|
+
if (value.completedAt !== undefined) out.completedAt = encodeInstant(value.completedAt);
|
|
592
|
+
return out;
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
export function decodePlannedWorkout(raw: unknown, at$ = "PlannedWorkout"): PlannedWorkout {
|
|
596
|
+
const object = asObject(raw, at$);
|
|
597
|
+
const id = asString(object.id, `${at$}.id`);
|
|
598
|
+
const plannedOn = asString(object.plannedOn, `${at$}.plannedOn`);
|
|
599
|
+
const activity = decodeWorkoutActivity(object.activity, `${at$}.activity`);
|
|
600
|
+
const title = optional(object.title, (value) => asString(value, `${at$}.title`));
|
|
601
|
+
const completedAt = optional(object.completedAt, (value) => decodeInstant(value, `${at$}.completedAt`));
|
|
602
|
+
return { id, plannedOn, activity, title, completedAt };
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
export function encodeTerraEvent(value: TerraEvent): Record<string, unknown> {
|
|
606
|
+
return value;
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
export function decodeTerraEvent(raw: unknown, at$ = "TerraEvent"): TerraEvent {
|
|
610
|
+
const object = asObject(raw, at$);
|
|
611
|
+
if (!(typeof object["at"] === "string")) {
|
|
612
|
+
throw new TypeError(`${at$}: at is not a string`);
|
|
613
|
+
}
|
|
614
|
+
if (!(typeof object["event"] === "string")) {
|
|
615
|
+
throw new TypeError(`${at$}: event is not a string`);
|
|
616
|
+
}
|
|
617
|
+
return object;
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
export function encodeSupportReport(value: SupportReport): Record<string, unknown> {
|
|
621
|
+
const out: Record<string, unknown> = {};
|
|
622
|
+
out.sdkVersion = value.sdkVersion;
|
|
623
|
+
out.generatedAt = encodeInstant(value.generatedAt);
|
|
624
|
+
out.state = encodeDiagnosticsState(value.state);
|
|
625
|
+
if (value.lastDelivery !== undefined) out.lastDelivery = encodeInstant(value.lastDelivery);
|
|
626
|
+
out.isConnected = value.isConnected;
|
|
627
|
+
out.requestedCategories = value.requestedCategories;
|
|
628
|
+
out.requestedWrites = value.requestedWrites;
|
|
629
|
+
out.requestedWorkouts = value.requestedWorkouts;
|
|
630
|
+
out.recentEvents = value.recentEvents.map((item) => encodeTerraEvent(item));
|
|
631
|
+
return out;
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
export function decodeSupportReport(raw: unknown, at$ = "SupportReport"): SupportReport {
|
|
635
|
+
const object = asObject(raw, at$);
|
|
636
|
+
const sdkVersion = asString(object.sdkVersion, `${at$}.sdkVersion`);
|
|
637
|
+
const generatedAt = decodeInstant(object.generatedAt, `${at$}.generatedAt`);
|
|
638
|
+
const state = decodeDiagnosticsState(object.state, `${at$}.state`);
|
|
639
|
+
const lastDelivery = optional(object.lastDelivery, (value) => decodeInstant(value, `${at$}.lastDelivery`));
|
|
640
|
+
const isConnected = asBoolean(object.isConnected, `${at$}.isConnected`);
|
|
641
|
+
const requestedCategories = asArray(object.requestedCategories, `${at$}.requestedCategories`).map((item, index) => asString(item, `${`${at$}.requestedCategories`}[${index}]`));
|
|
642
|
+
const requestedWrites = asArray(object.requestedWrites, `${at$}.requestedWrites`).map((item, index) => asString(item, `${`${at$}.requestedWrites`}[${index}]`));
|
|
643
|
+
const requestedWorkouts = asArray(object.requestedWorkouts, `${at$}.requestedWorkouts`).map((item, index) => asString(item, `${`${at$}.requestedWorkouts`}[${index}]`));
|
|
644
|
+
const recentEvents = asArray(object.recentEvents, `${at$}.recentEvents`).map((item, index) => decodeTerraEvent(item, `${`${at$}.recentEvents`}[${index}]`));
|
|
645
|
+
return { sdkVersion, generatedAt, state, lastDelivery, isConnected, requestedCategories, requestedWrites, requestedWorkouts, recentEvents };
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
export function encodeBootstrapState(value: BootstrapState): Record<string, unknown> {
|
|
649
|
+
const out: Record<string, unknown> = {};
|
|
650
|
+
out.bootstrapped = value.bootstrapped;
|
|
651
|
+
if (value.devId !== undefined) out.devId = value.devId;
|
|
652
|
+
out.platform = value.platform;
|
|
653
|
+
out.sdkVersion = value.sdkVersion;
|
|
654
|
+
out.backgroundRegistered = value.backgroundRegistered;
|
|
655
|
+
return out;
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
export function decodeBootstrapState(raw: unknown, at$ = "BootstrapState"): BootstrapState {
|
|
659
|
+
const object = asObject(raw, at$);
|
|
660
|
+
const bootstrapped = asBoolean(object.bootstrapped, `${at$}.bootstrapped`);
|
|
661
|
+
const devId = optional(object.devId, (value) => asString(value, `${at$}.devId`));
|
|
662
|
+
const platform = asString(object.platform, `${at$}.platform`);
|
|
663
|
+
const sdkVersion = asString(object.sdkVersion, `${at$}.sdkVersion`);
|
|
664
|
+
const backgroundRegistered = asBoolean(object.backgroundRegistered, `${at$}.backgroundRegistered`);
|
|
665
|
+
return { bootstrapped, devId, platform, sdkVersion, backgroundRegistered };
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
export function encodeTokenRequest(value: TokenRequest): Record<string, unknown> {
|
|
669
|
+
const out: Record<string, unknown> = {};
|
|
670
|
+
out.requestId = value.requestId;
|
|
671
|
+
return out;
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
export function decodeTokenRequest(raw: unknown, at$ = "TokenRequest"): TokenRequest {
|
|
675
|
+
const object = asObject(raw, at$);
|
|
676
|
+
const requestId = asString(object.requestId, `${at$}.requestId`);
|
|
677
|
+
return { requestId };
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
export function encodeEmpty(_value: Empty): Record<string, unknown> {
|
|
681
|
+
return {};
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
export function decodeEmpty(raw: unknown, at$ = "Empty"): Empty {
|
|
685
|
+
asObject(raw, at$);
|
|
686
|
+
return {} as never;
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
export function encodeSourceRequest(value: SourceRequest): Record<string, unknown> {
|
|
690
|
+
const out: Record<string, unknown> = {};
|
|
691
|
+
if (value.source !== undefined) out.source = value.source;
|
|
692
|
+
return out;
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
export function decodeSourceRequest(raw: unknown, at$ = "SourceRequest"): SourceRequest {
|
|
696
|
+
const object = asObject(raw, at$);
|
|
697
|
+
const source = optional(object.source, (value) => asSource(value, `${at$}.source`));
|
|
698
|
+
return { source };
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
export function encodeRangeRequest(value: RangeRequest): Record<string, unknown> {
|
|
702
|
+
const out: Record<string, unknown> = {};
|
|
703
|
+
out.range = encodeTimeRange(value.range);
|
|
704
|
+
return out;
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
export function decodeRangeRequest(raw: unknown, at$ = "RangeRequest"): RangeRequest {
|
|
708
|
+
const object = asObject(raw, at$);
|
|
709
|
+
const range = decodeTimeRange(object.range, `${at$}.range`);
|
|
710
|
+
return { range };
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
export function encodeCategoryRequest(value: CategoryRequest): Record<string, unknown> {
|
|
714
|
+
const out: Record<string, unknown> = {};
|
|
715
|
+
out.category = value.category;
|
|
716
|
+
if (value.source !== undefined) out.source = value.source;
|
|
717
|
+
return out;
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
export function decodeCategoryRequest(raw: unknown, at$ = "CategoryRequest"): CategoryRequest {
|
|
721
|
+
const object = asObject(raw, at$);
|
|
722
|
+
const category = asDataCategory(object.category, `${at$}.category`);
|
|
723
|
+
const source = optional(object.source, (value) => asSource(value, `${at$}.source`));
|
|
724
|
+
return { category, source };
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
export function encodeRecordIdRequest(value: RecordIdRequest): Record<string, unknown> {
|
|
728
|
+
const out: Record<string, unknown> = {};
|
|
729
|
+
out.id = value.id;
|
|
730
|
+
return out;
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
export function decodeRecordIdRequest(raw: unknown, at$ = "RecordIdRequest"): RecordIdRequest {
|
|
734
|
+
const object = asObject(raw, at$);
|
|
735
|
+
const id = asString(object.id, `${at$}.id`);
|
|
736
|
+
return { id };
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
export function encodeConnectRequest(value: ConnectRequest): Record<string, unknown> {
|
|
740
|
+
const out: Record<string, unknown> = {};
|
|
741
|
+
if (value.source !== undefined) out.source = value.source;
|
|
742
|
+
out.endUser = encodeEndUser(value.endUser);
|
|
743
|
+
if (value.token !== undefined) out.token = value.token;
|
|
744
|
+
return out;
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
export function decodeConnectRequest(raw: unknown, at$ = "ConnectRequest"): ConnectRequest {
|
|
748
|
+
const object = asObject(raw, at$);
|
|
749
|
+
const source = optional(object.source, (value) => asSource(value, `${at$}.source`));
|
|
750
|
+
const endUser = decodeEndUser(object.endUser, `${at$}.endUser`);
|
|
751
|
+
const token = optional(object.token, (value) => asString(value, `${at$}.token`));
|
|
752
|
+
return { source, endUser, token };
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
export function encodePermissionRequest(value: PermissionRequest): Record<string, unknown> {
|
|
756
|
+
const out: Record<string, unknown> = {};
|
|
757
|
+
out.read = caseSet(value.read);
|
|
758
|
+
out.write = caseSet(value.write);
|
|
759
|
+
out.workouts = value.workouts.map((item) => encodeWorkoutScope(item));
|
|
760
|
+
if (value.source !== undefined) out.source = value.source;
|
|
761
|
+
return out;
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
export function decodePermissionRequest(raw: unknown, at$ = "PermissionRequest"): PermissionRequest {
|
|
765
|
+
const object = asObject(raw, at$);
|
|
766
|
+
const read = caseSet(asArray(object.read, `${at$}.read`).map((item, index) => asDataCategory(item, `${`${at$}.read`}[${index}]`)));
|
|
767
|
+
const write = caseSet(asArray(object.write, `${at$}.write`).map((item, index) => asDataCategory(item, `${`${at$}.write`}[${index}]`)));
|
|
768
|
+
const workouts = asArray(object.workouts, `${at$}.workouts`).map((item, index) => decodeWorkoutScope(item, `${`${at$}.workouts`}[${index}]`));
|
|
769
|
+
const source = optional(object.source, (value) => asSource(value, `${at$}.source`));
|
|
770
|
+
return { read, write, workouts, source };
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
export function encodePermissionGrant(value: PermissionGrant): Record<string, unknown> {
|
|
774
|
+
const out: Record<string, unknown> = {};
|
|
775
|
+
if (value.granted !== undefined) out.granted = encodeHealthAccess(value.granted);
|
|
776
|
+
return out;
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
export function decodePermissionGrant(raw: unknown, at$ = "PermissionGrant"): PermissionGrant {
|
|
780
|
+
const object = asObject(raw, at$);
|
|
781
|
+
const granted = optional(object.granted, (value) => decodeHealthAccess(value, `${at$}.granted`));
|
|
782
|
+
return { granted };
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
export function encodeTokenResolveRequest(value: TokenResolveRequest): Record<string, unknown> {
|
|
786
|
+
const out: Record<string, unknown> = {};
|
|
787
|
+
out.requestId = value.requestId;
|
|
788
|
+
out.token = value.token;
|
|
789
|
+
return out;
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
export function decodeTokenResolveRequest(raw: unknown, at$ = "TokenResolveRequest"): TokenResolveRequest {
|
|
793
|
+
const object = asObject(raw, at$);
|
|
794
|
+
const requestId = asString(object.requestId, `${at$}.requestId`);
|
|
795
|
+
const token = asString(object.token, `${at$}.token`);
|
|
796
|
+
return { requestId, token };
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
export function encodeTokenRejectRequest(value: TokenRejectRequest): Record<string, unknown> {
|
|
800
|
+
const out: Record<string, unknown> = {};
|
|
801
|
+
out.requestId = value.requestId;
|
|
802
|
+
out.message = value.message;
|
|
803
|
+
return out;
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
export function decodeTokenRejectRequest(raw: unknown, at$ = "TokenRejectRequest"): TokenRejectRequest {
|
|
807
|
+
const object = asObject(raw, at$);
|
|
808
|
+
const requestId = asString(object.requestId, `${at$}.requestId`);
|
|
809
|
+
const message = asString(object.message, `${at$}.message`);
|
|
810
|
+
return { requestId, message };
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
export function encodeTokenProviderRequest(value: TokenProviderRequest): Record<string, unknown> {
|
|
814
|
+
const out: Record<string, unknown> = {};
|
|
815
|
+
out.present = value.present;
|
|
816
|
+
out.timeoutMs = value.timeoutMs;
|
|
817
|
+
return out;
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
export function decodeTokenProviderRequest(raw: unknown, at$ = "TokenProviderRequest"): TokenProviderRequest {
|
|
821
|
+
const object = asObject(raw, at$);
|
|
822
|
+
const present = asBoolean(object.present, `${at$}.present`);
|
|
823
|
+
const timeoutMs = asInteger(object.timeoutMs, `${at$}.timeoutMs`);
|
|
824
|
+
return { present, timeoutMs };
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
export function encodeMarkCompleteRequest(value: MarkCompleteRequest): Record<string, unknown> {
|
|
828
|
+
const out: Record<string, unknown> = {};
|
|
829
|
+
out.id = value.id;
|
|
830
|
+
if (value.at !== undefined) out.at = encodeInstant(value.at);
|
|
831
|
+
return out;
|
|
832
|
+
}
|
|
833
|
+
|
|
834
|
+
export function decodeMarkCompleteRequest(raw: unknown, at$ = "MarkCompleteRequest"): MarkCompleteRequest {
|
|
835
|
+
const object = asObject(raw, at$);
|
|
836
|
+
const id = asString(object.id, `${at$}.id`);
|
|
837
|
+
const at = optional(object.at, (value) => decodeInstant(value, `${at$}.at`));
|
|
838
|
+
return { id, at };
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
export function encodeBoolResult(value: BoolResult): Record<string, unknown> {
|
|
842
|
+
const out: Record<string, unknown> = {};
|
|
843
|
+
out.value = value.value;
|
|
844
|
+
return out;
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
export function decodeBoolResult(raw: unknown, at$ = "BoolResult"): BoolResult {
|
|
848
|
+
const object = asObject(raw, at$);
|
|
849
|
+
const value = asBoolean(object.value, `${at$}.value`);
|
|
850
|
+
return { value };
|
|
851
|
+
}
|
|
852
|
+
|
|
853
|
+
export function encodeStatusResult(value: StatusResult): Record<string, unknown> {
|
|
854
|
+
const out: Record<string, unknown> = {};
|
|
855
|
+
out.status = value.status;
|
|
856
|
+
return out;
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
export function decodeStatusResult(raw: unknown, at$ = "StatusResult"): StatusResult {
|
|
860
|
+
const object = asObject(raw, at$);
|
|
861
|
+
const status = asPermissionStatus(object.status, `${at$}.status`);
|
|
862
|
+
return { status };
|
|
863
|
+
}
|
|
864
|
+
|
|
865
|
+
export function encodeStatusesResult(value: StatusesResult): Record<string, unknown> {
|
|
866
|
+
const out: Record<string, unknown> = {};
|
|
867
|
+
out.statuses = value.statuses;
|
|
868
|
+
return out;
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
export function decodeStatusesResult(raw: unknown, at$ = "StatusesResult"): StatusesResult {
|
|
872
|
+
const object = asObject(raw, at$);
|
|
873
|
+
const statuses = Object.fromEntries(Object.entries(asObject(object.statuses, `${at$}.statuses`)).map(([key, item]) => [asDataCategory(key, `${at$}.statuses`), asPermissionStatus(item, `${at$}.statuses`)])) as never;
|
|
874
|
+
return { statuses };
|
|
875
|
+
}
|
|
876
|
+
|
|
877
|
+
export function encodeRecordIdList(value: RecordIdList): Record<string, unknown> {
|
|
878
|
+
const out: Record<string, unknown> = {};
|
|
879
|
+
out.ids = value.ids;
|
|
880
|
+
return out;
|
|
881
|
+
}
|
|
882
|
+
|
|
883
|
+
export function decodeRecordIdList(raw: unknown, at$ = "RecordIdList"): RecordIdList {
|
|
884
|
+
const object = asObject(raw, at$);
|
|
885
|
+
const ids = asArray(object.ids, `${at$}.ids`).map((item, index) => asString(item, `${`${at$}.ids`}[${index}]`));
|
|
886
|
+
return { ids };
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
export function encodeConnectionList(value: ConnectionList): Record<string, unknown> {
|
|
890
|
+
const out: Record<string, unknown> = {};
|
|
891
|
+
out.connections = value.connections.map((item) => encodeConnection(item));
|
|
892
|
+
return out;
|
|
893
|
+
}
|
|
894
|
+
|
|
895
|
+
export function decodeConnectionList(raw: unknown, at$ = "ConnectionList"): ConnectionList {
|
|
896
|
+
const object = asObject(raw, at$);
|
|
897
|
+
const connections = asArray(object.connections, `${at$}.connections`).map((item, index) => decodeConnection(item, `${`${at$}.connections`}[${index}]`));
|
|
898
|
+
return { connections };
|
|
899
|
+
}
|
|
900
|
+
|
|
901
|
+
export function encodeHeartRateList(value: HeartRateList): Record<string, unknown> {
|
|
902
|
+
const out: Record<string, unknown> = {};
|
|
903
|
+
out.samples = value.samples.map((item) => encodeHeartRateSample(item));
|
|
904
|
+
return out;
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
export function decodeHeartRateList(raw: unknown, at$ = "HeartRateList"): HeartRateList {
|
|
908
|
+
const object = asObject(raw, at$);
|
|
909
|
+
const samples = asArray(object.samples, `${at$}.samples`).map((item, index) => decodeHeartRateSample(item, `${`${at$}.samples`}[${index}]`));
|
|
910
|
+
return { samples };
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
export function encodeStepCountList(value: StepCountList): Record<string, unknown> {
|
|
914
|
+
const out: Record<string, unknown> = {};
|
|
915
|
+
out.samples = value.samples.map((item) => encodeStepCount(item));
|
|
916
|
+
return out;
|
|
917
|
+
}
|
|
918
|
+
|
|
919
|
+
export function decodeStepCountList(raw: unknown, at$ = "StepCountList"): StepCountList {
|
|
920
|
+
const object = asObject(raw, at$);
|
|
921
|
+
const samples = asArray(object.samples, `${at$}.samples`).map((item, index) => decodeStepCount(item, `${`${at$}.samples`}[${index}]`));
|
|
922
|
+
return { samples };
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
export function encodeSleepSegmentList(value: SleepSegmentList): Record<string, unknown> {
|
|
926
|
+
const out: Record<string, unknown> = {};
|
|
927
|
+
out.samples = value.samples.map((item) => encodeSleepSegment(item));
|
|
928
|
+
return out;
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
export function decodeSleepSegmentList(raw: unknown, at$ = "SleepSegmentList"): SleepSegmentList {
|
|
932
|
+
const object = asObject(raw, at$);
|
|
933
|
+
const samples = asArray(object.samples, `${at$}.samples`).map((item, index) => decodeSleepSegment(item, `${`${at$}.samples`}[${index}]`));
|
|
934
|
+
return { samples };
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
export function encodeWorkoutList(value: WorkoutList): Record<string, unknown> {
|
|
938
|
+
const out: Record<string, unknown> = {};
|
|
939
|
+
out.samples = value.samples.map((item) => encodeWorkout(item));
|
|
940
|
+
return out;
|
|
941
|
+
}
|
|
942
|
+
|
|
943
|
+
export function decodeWorkoutList(raw: unknown, at$ = "WorkoutList"): WorkoutList {
|
|
944
|
+
const object = asObject(raw, at$);
|
|
945
|
+
const samples = asArray(object.samples, `${at$}.samples`).map((item, index) => decodeWorkout(item, `${`${at$}.samples`}[${index}]`));
|
|
946
|
+
return { samples };
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
export function encodePlannedWorkoutList(value: PlannedWorkoutList): Record<string, unknown> {
|
|
950
|
+
const out: Record<string, unknown> = {};
|
|
951
|
+
out.workouts = value.workouts.map((item) => encodePlannedWorkout(item));
|
|
952
|
+
return out;
|
|
953
|
+
}
|
|
954
|
+
|
|
955
|
+
export function decodePlannedWorkoutList(raw: unknown, at$ = "PlannedWorkoutList"): PlannedWorkoutList {
|
|
956
|
+
const object = asObject(raw, at$);
|
|
957
|
+
const workouts = asArray(object.workouts, `${at$}.workouts`).map((item, index) => decodePlannedWorkout(item, `${`${at$}.workouts`}[${index}]`));
|
|
958
|
+
return { workouts };
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
export function encodeWorkoutScheduling(value: WorkoutScheduling): Record<string, unknown> {
|
|
962
|
+
const out: Record<string, unknown> = {};
|
|
963
|
+
out.status = value.status;
|
|
964
|
+
return out;
|
|
965
|
+
}
|
|
966
|
+
|
|
967
|
+
export function decodeWorkoutScheduling(raw: unknown, at$ = "WorkoutScheduling"): WorkoutScheduling {
|
|
968
|
+
const object = asObject(raw, at$);
|
|
969
|
+
const status = asWorkoutSchedulingStatus(object.status, `${at$}.status`);
|
|
970
|
+
return { status };
|
|
971
|
+
}
|
|
972
|
+
|
|
973
|
+
export function encodeLastDeliveryResult(value: LastDeliveryResult): Record<string, unknown> {
|
|
974
|
+
const out: Record<string, unknown> = {};
|
|
975
|
+
if (value.at !== undefined) out.at = encodeInstant(value.at);
|
|
976
|
+
return out;
|
|
977
|
+
}
|
|
978
|
+
|
|
979
|
+
export function decodeLastDeliveryResult(raw: unknown, at$ = "LastDeliveryResult"): LastDeliveryResult {
|
|
980
|
+
const object = asObject(raw, at$);
|
|
981
|
+
const at = optional(object.at, (value) => decodeInstant(value, `${at$}.at`));
|
|
982
|
+
return { at };
|
|
983
|
+
}
|
|
984
|
+
|
|
985
|
+
export function encodeHeartRateEntryList(value: HeartRateEntryList): Record<string, unknown> {
|
|
986
|
+
const out: Record<string, unknown> = {};
|
|
987
|
+
out.entries = value.entries.map((item) => encodeHeartRateEntry(item));
|
|
988
|
+
return out;
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
export function decodeHeartRateEntryList(raw: unknown, at$ = "HeartRateEntryList"): HeartRateEntryList {
|
|
992
|
+
const object = asObject(raw, at$);
|
|
993
|
+
const entries = asArray(object.entries, `${at$}.entries`).map((item, index) => decodeHeartRateEntry(item, `${`${at$}.entries`}[${index}]`));
|
|
994
|
+
return { entries };
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
export function encodeBodyEntryList(value: BodyEntryList): Record<string, unknown> {
|
|
998
|
+
const out: Record<string, unknown> = {};
|
|
999
|
+
out.entries = value.entries.map((item) => encodeBodyEntry(item));
|
|
1000
|
+
return out;
|
|
1001
|
+
}
|
|
1002
|
+
|
|
1003
|
+
export function decodeBodyEntryList(raw: unknown, at$ = "BodyEntryList"): BodyEntryList {
|
|
1004
|
+
const object = asObject(raw, at$);
|
|
1005
|
+
const entries = asArray(object.entries, `${at$}.entries`).map((item, index) => decodeBodyEntry(item, `${`${at$}.entries`}[${index}]`));
|
|
1006
|
+
return { entries };
|
|
1007
|
+
}
|
|
1008
|
+
|
|
1009
|
+
export function encodeStepEntryList(value: StepEntryList): Record<string, unknown> {
|
|
1010
|
+
const out: Record<string, unknown> = {};
|
|
1011
|
+
out.entries = value.entries.map((item) => encodeStepEntry(item));
|
|
1012
|
+
return out;
|
|
1013
|
+
}
|
|
1014
|
+
|
|
1015
|
+
export function decodeStepEntryList(raw: unknown, at$ = "StepEntryList"): StepEntryList {
|
|
1016
|
+
const object = asObject(raw, at$);
|
|
1017
|
+
const entries = asArray(object.entries, `${at$}.entries`).map((item, index) => decodeStepEntry(item, `${`${at$}.entries`}[${index}]`));
|
|
1018
|
+
return { entries };
|
|
1019
|
+
}
|
|
1020
|
+
|
|
1021
|
+
export function encodeSleepEntryList(value: SleepEntryList): Record<string, unknown> {
|
|
1022
|
+
const out: Record<string, unknown> = {};
|
|
1023
|
+
out.entries = value.entries.map((item) => encodeSleepEntry(item));
|
|
1024
|
+
return out;
|
|
1025
|
+
}
|
|
1026
|
+
|
|
1027
|
+
export function decodeSleepEntryList(raw: unknown, at$ = "SleepEntryList"): SleepEntryList {
|
|
1028
|
+
const object = asObject(raw, at$);
|
|
1029
|
+
const entries = asArray(object.entries, `${at$}.entries`).map((item, index) => decodeSleepEntry(item, `${`${at$}.entries`}[${index}]`));
|
|
1030
|
+
return { entries };
|
|
1031
|
+
}
|
|
1032
|
+
|
|
1033
|
+
export function encodeWorkoutEntryList(value: WorkoutEntryList): Record<string, unknown> {
|
|
1034
|
+
const out: Record<string, unknown> = {};
|
|
1035
|
+
out.entries = value.entries.map((item) => encodeWorkoutEntry(item));
|
|
1036
|
+
return out;
|
|
1037
|
+
}
|
|
1038
|
+
|
|
1039
|
+
export function decodeWorkoutEntryList(raw: unknown, at$ = "WorkoutEntryList"): WorkoutEntryList {
|
|
1040
|
+
const object = asObject(raw, at$);
|
|
1041
|
+
const entries = asArray(object.entries, `${at$}.entries`).map((item, index) => decodeWorkoutEntry(item, `${`${at$}.entries`}[${index}]`));
|
|
1042
|
+
return { entries };
|
|
1043
|
+
}
|
|
1044
|
+
|
|
1045
|
+
export function encodeNutritionEntryList(value: NutritionEntryList): Record<string, unknown> {
|
|
1046
|
+
const out: Record<string, unknown> = {};
|
|
1047
|
+
out.entries = value.entries.map((item) => encodeNutritionEntry(item));
|
|
1048
|
+
return out;
|
|
1049
|
+
}
|
|
1050
|
+
|
|
1051
|
+
export function decodeNutritionEntryList(raw: unknown, at$ = "NutritionEntryList"): NutritionEntryList {
|
|
1052
|
+
const object = asObject(raw, at$);
|
|
1053
|
+
const entries = asArray(object.entries, `${at$}.entries`).map((item, index) => decodeNutritionEntry(item, `${`${at$}.entries`}[${index}]`));
|
|
1054
|
+
return { entries };
|
|
1055
|
+
}
|
|
1056
|
+
|
|
1057
|
+
export function encodeEndUser(value: EndUser): Record<string, unknown> {
|
|
1058
|
+
switch (value.kind) {
|
|
1059
|
+
case "reference":
|
|
1060
|
+
return { kind: "reference", id: value.id };
|
|
1061
|
+
case "anonymous":
|
|
1062
|
+
return { kind: "anonymous" };
|
|
1063
|
+
}
|
|
1064
|
+
}
|
|
1065
|
+
|
|
1066
|
+
export function decodeEndUser(raw: unknown, at$ = "EndUser"): EndUser {
|
|
1067
|
+
const object = asObject(raw, at$);
|
|
1068
|
+
const tag = object.kind;
|
|
1069
|
+
switch (tag) {
|
|
1070
|
+
case "reference": {
|
|
1071
|
+
return { kind: "reference", id: asString(object.id, `${at$}.id`) };
|
|
1072
|
+
}
|
|
1073
|
+
case "anonymous": {
|
|
1074
|
+
return { kind: "anonymous" };
|
|
1075
|
+
}
|
|
1076
|
+
default:
|
|
1077
|
+
throw new TypeError(`${at$}: unknown kind ${String(tag)}`);
|
|
1078
|
+
}
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
export function encodeTimeRange(value: TimeRange): Record<string, unknown> {
|
|
1082
|
+
switch (value.kind) {
|
|
1083
|
+
case "lastHours":
|
|
1084
|
+
return { kind: "lastHours", hours: value.hours };
|
|
1085
|
+
case "lastDays":
|
|
1086
|
+
return { kind: "lastDays", days: value.days };
|
|
1087
|
+
case "today":
|
|
1088
|
+
return { kind: "today" };
|
|
1089
|
+
case "between":
|
|
1090
|
+
return { kind: "between", start: encodeInstant(value.start), end: encodeInstant(value.end) };
|
|
1091
|
+
}
|
|
1092
|
+
}
|
|
1093
|
+
|
|
1094
|
+
export function decodeTimeRange(raw: unknown, at$ = "TimeRange"): TimeRange {
|
|
1095
|
+
const object = asObject(raw, at$);
|
|
1096
|
+
const tag = object.kind;
|
|
1097
|
+
switch (tag) {
|
|
1098
|
+
case "lastHours": {
|
|
1099
|
+
return { kind: "lastHours", hours: asInteger(object.hours, `${at$}.hours`) };
|
|
1100
|
+
}
|
|
1101
|
+
case "lastDays": {
|
|
1102
|
+
return { kind: "lastDays", days: asInteger(object.days, `${at$}.days`) };
|
|
1103
|
+
}
|
|
1104
|
+
case "today": {
|
|
1105
|
+
return { kind: "today" };
|
|
1106
|
+
}
|
|
1107
|
+
case "between": {
|
|
1108
|
+
return { kind: "between", start: decodeInstant(object.start, `${at$}.start`), end: decodeInstant(object.end, `${at$}.end`) };
|
|
1109
|
+
}
|
|
1110
|
+
default:
|
|
1111
|
+
throw new TypeError(`${at$}: unknown kind ${String(tag)}`);
|
|
1112
|
+
}
|
|
1113
|
+
}
|
|
1114
|
+
|
|
1115
|
+
export function encodeSleepStage(value: SleepStage): Record<string, unknown> {
|
|
1116
|
+
switch (value.kind) {
|
|
1117
|
+
case "inBed":
|
|
1118
|
+
return { kind: "inBed" };
|
|
1119
|
+
case "awake":
|
|
1120
|
+
return { kind: "awake" };
|
|
1121
|
+
case "asleep":
|
|
1122
|
+
return { kind: "asleep" };
|
|
1123
|
+
case "light":
|
|
1124
|
+
return { kind: "light" };
|
|
1125
|
+
case "deep":
|
|
1126
|
+
return { kind: "deep" };
|
|
1127
|
+
case "rem":
|
|
1128
|
+
return { kind: "rem" };
|
|
1129
|
+
case "unknown":
|
|
1130
|
+
return { kind: "unknown", raw: value.raw };
|
|
1131
|
+
}
|
|
1132
|
+
}
|
|
1133
|
+
|
|
1134
|
+
export function decodeSleepStage(raw: unknown, at$ = "SleepStage"): SleepStage {
|
|
1135
|
+
const object = asObject(raw, at$);
|
|
1136
|
+
const tag = object.kind;
|
|
1137
|
+
switch (tag) {
|
|
1138
|
+
case "inBed": {
|
|
1139
|
+
return { kind: "inBed" };
|
|
1140
|
+
}
|
|
1141
|
+
case "awake": {
|
|
1142
|
+
return { kind: "awake" };
|
|
1143
|
+
}
|
|
1144
|
+
case "asleep": {
|
|
1145
|
+
return { kind: "asleep" };
|
|
1146
|
+
}
|
|
1147
|
+
case "light": {
|
|
1148
|
+
return { kind: "light" };
|
|
1149
|
+
}
|
|
1150
|
+
case "deep": {
|
|
1151
|
+
return { kind: "deep" };
|
|
1152
|
+
}
|
|
1153
|
+
case "rem": {
|
|
1154
|
+
return { kind: "rem" };
|
|
1155
|
+
}
|
|
1156
|
+
case "unknown": {
|
|
1157
|
+
return { kind: "unknown", raw: asString(object.raw, `${at$}.raw`) };
|
|
1158
|
+
}
|
|
1159
|
+
default:
|
|
1160
|
+
if (typeof tag === "string") return { kind: "unknown", raw: tag };
|
|
1161
|
+
throw new TypeError(`${at$}: unknown kind ${String(tag)}`);
|
|
1162
|
+
}
|
|
1163
|
+
}
|
|
1164
|
+
|
|
1165
|
+
export function encodeWorkoutActivity(value: WorkoutActivity): Record<string, unknown> {
|
|
1166
|
+
switch (value.kind) {
|
|
1167
|
+
case "running":
|
|
1168
|
+
return { kind: "running" };
|
|
1169
|
+
case "walking":
|
|
1170
|
+
return { kind: "walking" };
|
|
1171
|
+
case "cycling":
|
|
1172
|
+
return { kind: "cycling" };
|
|
1173
|
+
case "swimming":
|
|
1174
|
+
return { kind: "swimming" };
|
|
1175
|
+
case "strengthTraining":
|
|
1176
|
+
return { kind: "strengthTraining" };
|
|
1177
|
+
case "other":
|
|
1178
|
+
return { kind: "other", label: value.label };
|
|
1179
|
+
}
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1182
|
+
export function decodeWorkoutActivity(raw: unknown, at$ = "WorkoutActivity"): WorkoutActivity {
|
|
1183
|
+
const object = asObject(raw, at$);
|
|
1184
|
+
const tag = object.kind;
|
|
1185
|
+
switch (tag) {
|
|
1186
|
+
case "running": {
|
|
1187
|
+
return { kind: "running" };
|
|
1188
|
+
}
|
|
1189
|
+
case "walking": {
|
|
1190
|
+
return { kind: "walking" };
|
|
1191
|
+
}
|
|
1192
|
+
case "cycling": {
|
|
1193
|
+
return { kind: "cycling" };
|
|
1194
|
+
}
|
|
1195
|
+
case "swimming": {
|
|
1196
|
+
return { kind: "swimming" };
|
|
1197
|
+
}
|
|
1198
|
+
case "strengthTraining": {
|
|
1199
|
+
return { kind: "strengthTraining" };
|
|
1200
|
+
}
|
|
1201
|
+
case "other": {
|
|
1202
|
+
return { kind: "other", label: asString(object.label, `${at$}.label`) };
|
|
1203
|
+
}
|
|
1204
|
+
default:
|
|
1205
|
+
if (typeof tag === "string") return { kind: "other", label: tag };
|
|
1206
|
+
throw new TypeError(`${at$}: unknown kind ${String(tag)}`);
|
|
1207
|
+
}
|
|
1208
|
+
}
|
|
1209
|
+
|
|
1210
|
+
export function encodeDiagnosticsState(value: DiagnosticsState): Record<string, unknown> {
|
|
1211
|
+
switch (value.state) {
|
|
1212
|
+
case "healthy":
|
|
1213
|
+
return { state: "healthy" };
|
|
1214
|
+
case "quiet":
|
|
1215
|
+
return { state: "quiet", since: encodeInstant(value.since) };
|
|
1216
|
+
case "backgroundRestricted":
|
|
1217
|
+
return { state: "backgroundRestricted", reason: value.reason };
|
|
1218
|
+
case "backgroundRefreshUnscheduled":
|
|
1219
|
+
return { state: "backgroundRefreshUnscheduled" };
|
|
1220
|
+
case "pendingRetry":
|
|
1221
|
+
return { state: "pendingRetry" };
|
|
1222
|
+
case "linkRevoked":
|
|
1223
|
+
return { state: "linkRevoked" };
|
|
1224
|
+
case "devIDMismatch":
|
|
1225
|
+
return { state: "devIDMismatch" };
|
|
1226
|
+
}
|
|
1227
|
+
}
|
|
1228
|
+
|
|
1229
|
+
export function decodeDiagnosticsState(raw: unknown, at$ = "DiagnosticsState"): DiagnosticsState {
|
|
1230
|
+
const object = asObject(raw, at$);
|
|
1231
|
+
const tag = object.state;
|
|
1232
|
+
switch (tag) {
|
|
1233
|
+
case "healthy": {
|
|
1234
|
+
return { state: "healthy" };
|
|
1235
|
+
}
|
|
1236
|
+
case "quiet": {
|
|
1237
|
+
return { state: "quiet", since: decodeInstant(object.since, `${at$}.since`) };
|
|
1238
|
+
}
|
|
1239
|
+
case "backgroundRestricted": {
|
|
1240
|
+
return { state: "backgroundRestricted", reason: optional(object.reason, (value) => asBackgroundRestrictionReason(value, `${at$}.reason`)) };
|
|
1241
|
+
}
|
|
1242
|
+
case "backgroundRefreshUnscheduled": {
|
|
1243
|
+
return { state: "backgroundRefreshUnscheduled" };
|
|
1244
|
+
}
|
|
1245
|
+
case "pendingRetry": {
|
|
1246
|
+
return { state: "pendingRetry" };
|
|
1247
|
+
}
|
|
1248
|
+
case "linkRevoked": {
|
|
1249
|
+
return { state: "linkRevoked" };
|
|
1250
|
+
}
|
|
1251
|
+
case "devIDMismatch": {
|
|
1252
|
+
return { state: "devIDMismatch" };
|
|
1253
|
+
}
|
|
1254
|
+
default:
|
|
1255
|
+
throw new TypeError(`${at$}: unknown state ${String(tag)}`);
|
|
1256
|
+
}
|
|
1257
|
+
}
|
|
1258
|
+
|
|
1259
|
+
export function encodeStreamMessage(value: StreamMessage): Record<string, unknown> {
|
|
1260
|
+
switch (value.kind) {
|
|
1261
|
+
case "data":
|
|
1262
|
+
return { kind: "data", element: value.element };
|
|
1263
|
+
case "error":
|
|
1264
|
+
return { kind: "error", error: encodeTerraErrorPayload(value.error) };
|
|
1265
|
+
case "complete":
|
|
1266
|
+
return { kind: "complete" };
|
|
1267
|
+
}
|
|
1268
|
+
}
|
|
1269
|
+
|
|
1270
|
+
export function decodeStreamMessage(raw: unknown, at$ = "StreamMessage"): StreamMessage {
|
|
1271
|
+
const object = asObject(raw, at$);
|
|
1272
|
+
const tag = object.kind;
|
|
1273
|
+
switch (tag) {
|
|
1274
|
+
case "data": {
|
|
1275
|
+
return { kind: "data", element: asObject(object.element, `${at$}.element`) };
|
|
1276
|
+
}
|
|
1277
|
+
case "error": {
|
|
1278
|
+
return { kind: "error", error: decodeTerraErrorPayload(object.error, `${at$}.error`) };
|
|
1279
|
+
}
|
|
1280
|
+
case "complete": {
|
|
1281
|
+
return { kind: "complete" };
|
|
1282
|
+
}
|
|
1283
|
+
default:
|
|
1284
|
+
throw new TypeError(`${at$}: unknown kind ${String(tag)}`);
|
|
1285
|
+
}
|
|
1286
|
+
}
|
|
1287
|
+
|