1import type * as personalizeevents from "@distilled.cloud/aws/personalize-events";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { Dataset } from "./Dataset.ts";
5
6/**
7 * `PutUsers` request with `datasetArn` injected from the bound dataset.
8 */
9export interface PutUsersRequest extends Omit<
10 personalizeevents.PutUsersRequest,
11 "datasetArn"
12> {}
13
14/**
15 * Runtime binding for `personalize:PutUsers`, scoped to one {@link Dataset} —
16 * Adds or updates users incrementally in the bound Users {@link Dataset}
17 * — the streaming alternative to a bulk dataset import job for keeping
18 * user metadata fresh.
19 * Provide the implementation with
20 * `Effect.provide(AWS.Personalize.PutUsersHttp)`.
21 *
22 * ### Incremental Imports
23 * **Example:** Upsert a User
24 * ```typescript
25 * // init
26 * const putUsers = yield* Personalize.PutUsers(usersDataset);
27 *
28 * yield* putUsers({
29 * users: [{
30 * userId: "user-1",
31 * properties: JSON.stringify({ membership: "gold" }),
32 * }],
33 * });
34 * ```
35 *
36 * @binding
37 */
38export interface PutUsers extends Binding.Service<
39 PutUsers,
40 "AWS.Personalize.PutUsers",
41 (
42 dataset: Dataset,
43 ) => Effect.Effect<
44 (
45 request: PutUsersRequest,
46 ) => Effect.Effect<
47 personalizeevents.PutUsersResponse,
48 personalizeevents.PutUsersError
49 >
50 >
51> {}
52export const PutUsers = Binding.Service<PutUsers>("AWS.Personalize.PutUsers");