module Network.HTTP.Client.Conduit.Download (
    download
  , downloadWithManager
) where

import Conduit
import Control.Monad.IO.Class (MonadIO)
import Control.Monad.Reader.Class
import Network.HTTP.Client.Conduit

download :: (MonadBaseControl IO m, MonadIO m, MonadThrow m) => String -> FilePath -> m ()
download url filepath = withManager $ runResourceT $ downloadWithManager url filepath

downloadWithManager :: (MonadBaseControl IO m, MonadReader env m, HasHttpManager env, MonadResource m) => String -> FilePath -> m ()
downloadWithManager url filepath = do
    req <- parseRequest url
    withResponse req $ \resp -> responseBody resp $$ sinkFile filepath