| 80 | * @category constructor |
| 81 | */ |
| 82 | export const single = <IR, II, IA, AR, AI, A, R, E>( |
| 83 | options: { |
| 84 | readonly Request: Schema.Schema<IA, II, IR> |
| 85 | readonly Result: Schema.Schema<A, AI, AR> |
| 86 | readonly execute: (request: II) => Effect.Effect<ReadonlyArray<unknown>, E, R> |
| 87 | } |
| 88 | ) => { |
| 89 | const encodeRequest = Schema.encode(options.Request) |
| 90 | const decode = Schema.decodeUnknown(options.Result) |
| 91 | return (request: IA): Effect.Effect<A, E | ParseError | Cause.NoSuchElementException, R | IR | AR> => |
| 92 | Effect.flatMap( |
| 93 | Effect.flatMap(encodeRequest(request), options.execute), |
| 94 | (arr): Effect.Effect<A, ParseError | Cause.NoSuchElementException, AR> => |
| 95 | Array.isArray(arr) && arr.length > 0 ? decode(arr[0]) : Effect.fail(new Cause.NoSuchElementException()) |
| 96 | ) |
| 97 | } |