Как один канал `rawRequestBody` в`requestBodySource`?

Йесод имеет rawRequestBody со следующей подписью типа:

rawRequestBody :: MonadHandler m => Source m ByteString

И http-проводник имеет эту функцию, которая превращает источник в RequestBody:

requestBodySource :: Int64 -> Source (ResourceT IO) ByteString -> RequestBody

Я хочу иметь возможность транслировать rawRequestBody к объекту S3 путем преобразования его в RequestBody внутри обработчика, ResourceT IO ~ MonadHandler не вычисляет, и я не могу сделать MonadHandler m => m -> ResourceT IO

Я пробовал:

transPipe - если мы получим Source Handler ByteString от rawRequestBody похоже, единственный способ добраться до ByteString это к consume это, т.е.

transPipe ??? rawRequestBody :: Source (ResourceT IO) ByteString

handlerToIO - однако кажется, что тело запроса очищено, поэтому никаких данных не будет

Пожалуйста помоги:)

1 ответ

Решение

Функция waiRequest вернет вам значение WAI- запроса. Вы можете использовать sourceRequestBody, чтобы получить Source От этого.

Другие вопросы по тегам