|
1 | | -import type { BotApiResponse } from '../BotApiTransport.ts' |
| 1 | +import type { BotApiResponse, BotApiTransport } from '../BotApiTransport.ts' |
2 | 2 | import * as HttpBody from '@effect/platform/HttpBody' |
3 | 3 | import * as HttpClient from '@effect/platform/HttpClient' |
4 | 4 | import * as Effect from 'effect/Effect' |
5 | | -import * as Layer from 'effect/Layer' |
6 | | -import { BotApiTransport, BotApiTransportError } from '../BotApiTransport.ts' |
| 5 | +import { BotApiTransportError } from '../BotApiTransport.ts' |
7 | 6 |
|
8 | | -export const layerWith = (options: { |
| 7 | +export const makeWith = (options: { |
9 | 8 | makeUrl: (method: string) => URL |
10 | | -}) => Layer.effect( |
11 | | - BotApiTransport, |
12 | | - Effect.gen(function* () { |
13 | | - const { makeUrl } = options |
14 | | - const client = yield* HttpClient.HttpClient |
15 | | - const transport: typeof BotApiTransport.Service = { |
16 | | - sendRequest: (method, params) => ( |
17 | | - Effect |
18 | | - .gen(function* () { |
19 | | - const url = makeUrl(method) |
20 | | - // TODO: Serialize necessary parameters and handle file uploads. |
21 | | - const body = yield* HttpBody.json(params) |
22 | | - const response = yield* client.post(url, { body }) |
23 | | - const responseJson = yield* response.json |
24 | | - return responseJson as BotApiResponse |
25 | | - }) |
26 | | - .pipe( |
27 | | - Effect.catchAll(error => ( |
28 | | - Effect.fail(new BotApiTransportError({ cause: error })) |
29 | | - )), |
30 | | - ) |
31 | | - ), |
32 | | - } |
33 | | - return transport |
34 | | - }), |
35 | | -) |
| 9 | +}): Effect.Effect< |
| 10 | + typeof BotApiTransport.Service, |
| 11 | + never, |
| 12 | + HttpClient.HttpClient |
| 13 | +> => Effect.gen(function* () { |
| 14 | + const { makeUrl } = options |
| 15 | + const client = yield* HttpClient.HttpClient |
| 16 | + return { |
| 17 | + sendRequest: (method, params) => ( |
| 18 | + Effect |
| 19 | + .gen(function* () { |
| 20 | + const url = makeUrl(method) |
| 21 | + // TODO: Serialize necessary parameters and handle file uploads. |
| 22 | + const body = yield* HttpBody.json(params) |
| 23 | + const response = yield* client.post(url, { body }) |
| 24 | + const responseJson = yield* response.json |
| 25 | + return responseJson as BotApiResponse |
| 26 | + }) |
| 27 | + .pipe( |
| 28 | + Effect.catchAll(error => ( |
| 29 | + Effect.fail(new BotApiTransportError({ cause: error })) |
| 30 | + )), |
| 31 | + ) |
| 32 | + ), |
| 33 | + } |
| 34 | +}) |
0 commit comments