1import type * as geoRoutes from "@distilled.cloud/aws/geo-routes";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4
5/**
6 * Runtime binding for `geo-routes:CalculateIsolines` — compute areas
7 * reachable within time or distance thresholds from a point (isochrones /
8 * isodistances), e.g. "everywhere within a 30-minute drive".
9 *
10 * geo-routes is a standalone, pay-per-call Amazon Location API with no
11 * resource to manage: the binding takes no arguments and grants the function
12 * `geo-routes:CalculateIsolines`. Requests and responses are raw distilled
13 * types (`Origin` is a `[longitude, latitude]` pair).
14 *
15 * ### Calculating Isolines
16 * Provide the `CalculateIsolinesHttp` implementation layer on the Function
17 * effect (`.pipe(Effect.provide(AWS.GeoRoutes.CalculateIsolinesHttp))`), bind
18 * in the init phase, then call the client at runtime.
19 *
20 * **Example:** Calculate a 10-minute drive-time isoline
21 * ```typescript
22 * // init
23 * const calculateIsolines = yield* AWS.GeoRoutes.CalculateIsolines();
24 *
25 * // runtime — coordinates are [longitude, latitude]; thresholds in seconds
26 * const result = yield* calculateIsolines({
27 * Origin: [-122.339, 47.61],
28 * Thresholds: { Time: [600] },
29 * TravelMode: "Car",
30 * });
31 * const polygons = result.Isolines[0]?.Geometries;
32 * ```
33 *
34 * @binding
35 */
36export interface CalculateIsolines extends Binding.Service<
37 CalculateIsolines,
38 "AWS.GeoRoutes.CalculateIsolines",
39 () => Effect.Effect<
40 (
41 request: geoRoutes.CalculateIsolinesRequest,
42 ) => Effect.Effect<
43 geoRoutes.CalculateIsolinesResponse,
44 geoRoutes.CalculateIsolinesError
45 >
46 >
47> {}
48export const CalculateIsolines = Binding.Service<CalculateIsolines>(
49 "AWS.GeoRoutes.CalculateIsolines",
50);