MyNixOS website logo
Description

Conduit streaming support for Hreq.

Conduit streaming support for Hreq an HTTP client library.

Hreq

Hackage MIT license Build status

Implementation of Hreq client as an HTTP Conduit streaming client basing on hreq-core. More streaming backends can be added in the future depending on community interest.

Please look at the repository README.md file for more information.

Streaming Example

{-# LANGUAGE DataKinds         #-}
{-# LANGUAGE FlexibleContexts  #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes        #-}
{-# LANGUAGE TypeApplications  #-}
{-# LANGUAGE TypeOperators     #-}

import Conduit
import Data.Functor (void)
import qualified Data.Text as T

import Hreq.Conduit

main' :: IO ()
main' = void $ do
  runHttpBin streamResponse
  streamFile "README.md"

runHttpBin :: Hreq IO a -> IO a
runHttpBin action = runHreq baseUrl action
  where
    baseUrl = HttpsDomain "httpbin.org"

-- | Stream data from an endpoint and write it into a temporary file
streamResponse :: RunConduitClient m => m ()
streamResponse =
  hreqWithConduit
   @("stream-bytes" :> Capture Int :> StreamGet)
    (size :. Empty)
    $ \ src -> void $ runConduitRes $ src .| sinkSystemTempFile "hreq.json"
  where
    size = 3 * 1024 * 1024 -- amount of data to stream in MBs

-- | stream data from a file and send it as a Request body stream over the network.
streamFile :: String -> IO Response
streamFile fp =
  withSourceFile fp $
     \srcFile -> do
        let src :: ReqBodySource
            src = ReqBodySource
                  $ srcFile
                  .| decodeUtf8C
                  .| mapC T.toUpper
                  .| encodeUtf8C

        runHttpBin $ streamReq src
  where
    streamReq :: RunClient m => ReqBodySource -> m Response
    streamReq src = hreq @("post" :> ConduitReqBody :> RawResponse POST) (src :. Empty)

Documentation

This README is tested by markdown-unlit to make sure the code builds. To keep that happy, we do need a main in this file, so ignore the following :)

main :: IO ()
main = pure ()
Metadata

Version

0.1.0.0

License

Platforms (75)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows