@@ -4,17 +4,33 @@ module Docker.Internal where
4import Blaze.ByteString.Builder (toByteString)
4import Blaze.ByteString.Builder (toByteString)
5import Data.ByteString as BS
5import Data.ByteString as BS
6import Data.ByteString (ByteString)
6import Data.ByteString (ByteString)
7import Data.Text as T
8import Data.Text as T
8import Data.Text (Text)
9import Data.Text (Text)
9import Data.Text.Encoding (decodeUtf8, encodeUtf8)
10import Data.Text.Encoding (decodeUtf8, encodeUtf8)
11+import qualified Network.HTTP.Client as HTTP
10import Network.HTTP.Types (Query, encodePath,
12import Network.HTTP.Types (Query, encodePath,
11 encodePathSegments)
13 encodePathSegments)
14import Docker.Types
15import Docker.Types
17+-- The reason we return Maybe Request is because the parseURL function
18+-- might find out parameters are invalid and will fail to build a Request
19+-- Since we're building the Requests this shouldn't happen, but would
20+-- benefit from testing that for instance all of our Endpoints are solid
16−mkHttpRequest :: DockerClientOpts -> Request
22+mkHttpRequest :: HttpVerb -> Endpoint -> DockerClientOpts -> Maybe Request
17−mkHttpRequest = undefined
23+mkHttpRequest verb e opts = request
24+ where fullE = T.unpack (baseUrl opts) ++ T.unpack (getEndpoint e)
25+ initialR = HTTP.parseUrl fullE
26+ request = case initialR of
27+ Just ir -> return $ ir { HTTP.method = (encodeUtf8 . T.pack $ show verb) } -- , requestBody = RequestBodyLBS $ encode requestObject }
29+ -- TODO: manager = newManager defaultManagerSettings -- We likely need
32+defaultHandler :: Request -> IO Response
33+defaultHandler = undefined
19encodeURL :: [Text] -> Text
35encodeURL :: [Text] -> Text
20encodeURL ps = decodeUtf8 $ toByteString $ encodePathSegments ps
36encodeURL ps = decodeUtf8 $ toByteString $ encodePathSegments ps