1import type * as iotw from "@distilled.cloud/aws/iot-wireless";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { WirelessDevice } from "./WirelessDevice.ts";
5
6/**
7 * Request for {@link UpdateResourcePosition}. The bound device's id and the
8 * `WirelessDevice` resource type are injected automatically; supply the
9 * GeoJSON position payload (a string is accepted directly).
10 */
11export interface UpdateResourcePositionRequest extends Omit<
12 iotw.UpdateResourcePositionRequest,
13 "ResourceIdentifier" | "ResourceType"
14> {}
15
16/**
17 * Runtime binding for `iotwireless:UpdateResourcePosition` — set the bound
18 * wireless device's static position (WGS84, as a GeoJSON payload) from a
19 * deployed Lambda or Task.
20 *
21 * ### Updating Device Position
22 * Provide the `UpdateResourcePositionHttp` implementation layer on the
23 * Function effect, bind the device in the init phase, then call the
24 * returned client at runtime.
25 *
26 * **Example:** Set a Static GeoJSON Position
27 * ```typescript
28 * // init
29 * const updatePosition = yield* AWS.IoTWireless.UpdateResourcePosition(device);
30 *
31 * // runtime — coordinates are [longitude, latitude, altitude]
32 * yield* updatePosition({
33 * GeoJsonPayload: JSON.stringify({
34 * type: "Point",
35 * coordinates: [-122.33, 47.61, 10],
36 * }),
37 * });
38 * // on the Function effect:
39 * // .pipe(Effect.provide(AWS.IoTWireless.UpdateResourcePositionHttp))
40 * ```
41 *
42 * @binding
43 */
44export interface UpdateResourcePosition extends Binding.Service<
45 UpdateResourcePosition,
46 "AWS.IoTWireless.UpdateResourcePosition",
47 (
48 device: WirelessDevice,
49 ) => Effect.Effect<
50 (
51 request: UpdateResourcePositionRequest,
52 ) => Effect.Effect<
53 iotw.UpdateResourcePositionResponse,
54 iotw.UpdateResourcePositionError
55 >
56 >
57> {}
58export const UpdateResourcePosition = Binding.Service<UpdateResourcePosition>(
59 "AWS.IoTWireless.UpdateResourcePosition",
60);