| 373 | * @since 4.0.0 |
| 374 | */ |
| 375 | export const fromWebHandler = ( |
| 376 | handler: (request: Request) => Promise<Response> |
| 377 | ): Effect.Effect<HttpServerResponse, HttpServerError, HttpServerRequest> => |
| 378 | Effect.callback((resume, signal) => { |
| 379 | const fiber = Fiber.getCurrent()! |
| 380 | const request = Context.getUnsafe(fiber.context, HttpServerRequest) |
| 381 | const requestResult = Request.toWebResult(request, { |
| 382 | signal, |
| 383 | context: fiber.context |
| 384 | }) |
| 385 | if (requestResult._tag === "Failure") { |
| 386 | return resume(Effect.fail(new HttpServerError({ reason: requestResult.failure }))) |
| 387 | } |
| 388 | handler(requestResult.success).then( |
| 389 | (response) => resume(Effect.succeed(Response.fromWeb(response))), |
| 390 | (cause) => |
| 391 | resume(Effect.fail( |
| 392 | new HttpServerError({ |
| 393 | reason: new InternalError({ |
| 394 | cause, |
| 395 | request, |
| 396 | description: "HttpApp.fromWebHandler: Error in handler" |
| 397 | }) |
| 398 | }) |
| 399 | )) |
| 400 | ) |
| 401 | }) |