Как передать `rawRequestBody` в `requestBodySource`?

У Yesod есть rawRequestBody со следующей сигнатурой типа:

rawRequestBody :: MonadHandler m => Source m ByteString

И у http-conduit есть функция, которая преобразует источник в 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 - однако кажется, что тело запроса очищено, поэтому нет доступных данных

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


person Nathan Kot    schedule 17.07.2015    source источник


Ответы (1)


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

person Michael Snoyman    schedule 17.07.2015