これを箱から出しては何もありませんが、必要な部分はすべて利用できます。
始める前に、私は使用人たちを提供し、すべての
まず(GetObjectResponse
のgorsBody
が出典であるRsBody
、である)あなたがシンクにストリーミングすることができた場合、それはあなたがソースを持っていることを意味していることを推測HasServer
という新しいインスタンスを作成することで、新しい戻り値型のサポートを追加できる可能性があるので、EitherT ServantErr IO (Source ...)
を提供し、それをストリームにすることができます。
このインスタンスを作成するには、route :: Proxy layout -> Server layout -> RoutingApplication
を実装する必要があります。 Server layout
は、この場合、サーバーにしたいソースであるEitherT ServantErr IO layout
とlayout
を意味するので、ソースを返す関数です(HTTPエラーで失敗する可能性があります)。
我々は(継続スタイルで)Request
を取り、比類のない経路エラー、または応答のいずれかを意味し、RouteResult Response
を返す関数である、RoutingApplication
を返却する必要があります。 Request
とResponse
は両方ともServantではなく標準であるため、残りのエコシステムを見て、その実装方法を調べることができます。
幸いなことに、私たちは遠くに行く必要はありません:responseSource
は、ステータス値、いくつかのレスポンスヘッダとソースを取り、あなたにResponse
を与える:Network.Wai.Conduit
我々はroute
機能を実装する必要があるだけで何が含まれています。
これはかなりの作業ですが、必要なものはすべてそこにあります。 source of the instance HasServer * (Get ...)
を探していると助けになるかもしれません。
「ストリームエンドポイントのサポート」を追加するためのServantが現在あります。 https://github.com/haskell-servant/servant/pull/836 – erewok