From b4d2fc6219a530bc534ff783b369091adb11a26e Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 31 Jul 2019 12:27:27 -0400 Subject: [PATCH] add downloadRequests --- Lfs.hs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/Lfs.hs b/Lfs.hs index 193e924bca..4e4e60ee51 100644 --- a/Lfs.hs +++ b/Lfs.hs @@ -6,7 +6,11 @@ import Data.Aeson.Types import GHC.Generics import qualified Data.Map as M import qualified Data.Text as T +import qualified Data.Text.Encoding as E import qualified Data.ByteString.Lazy as L +import qualified Data.CaseInsensitive as CI +import Data.Maybe +import Network.HTTP.Types import Network.HTTP.Client -- | Adds necessary headers to a Request and makes it post the @@ -45,6 +49,18 @@ parseResponseBody resp = case eitherDecode resp of Left _ -> Left $ Left err Right resp -> Right resp +-- | Builds http requests that can be used to download the objects that +-- were requested using a TransferRequest. +downloadRequests :: TransferResponse DownloadOperation -> ([(TransferResponseOperation DownloadOperation, Maybe Request)]) +downloadRequests = map mkreq . objects + where + mkreq op = (op, mkreq' (download (resp_actions op))) + mkreq' ps = do + r <- parseRequest (T.unpack (href ps)) + let headers = map convheader $ maybe [] M.toList (header ps) + return $ r { requestHeaders = headers } + convheader (k, v) = (CI.mk (E.encodeUtf8 k), E.encodeUtf8 v) + data TransferRequest = TransferRequest { req_operation :: TransferRequestOperation , req_transfers :: [TransferAdapter] @@ -195,5 +211,3 @@ type HTTPHeaderValue = T.Text -- Prevent Nothing from serializing to null. nonNullOptions :: Options nonNullOptions = defaultOptions { omitNothingFields = True } - -