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 } - -