on master help sign in
Added get version endpoint
0ce23d1Deni Bertovic
src/Docker.hs+19−2
@@ -1,9 +1,26 @@
1module Docker where
1module Docker where
2
2
3+import Control.Applicative ((<$>), (<*>))
4+import Control.Monad.Except (catchError, throwError)
5+import Control.Monad.IO.Class (MonadIO, liftIO)
6+import Control.Monad.Reader (ask)
7+import Control.Monad.Reader (lift)
8+import Data.Aeson (decode)
9+import Data.Maybe (fromJust)
10+import Network.HTTP.Client (responseBody)
11+import Network.HTTP.Types (StdMethod (..))
12+
13+import Docker.Internal
3import Docker.Types
14import Docker.Types
4
15
5−getDockerVersion :: Monad m => DockerT m (DockerVersion)
16+getDockerVersion :: DockerT IO (DockerVersion)
6−getDockerVersion = undefined
17+getDockerVersion = do
18+ (opts, httpHandler) <- ask
19+ let request = fromJust $ mkHttpRequest GET VersionEndpoint opts
20+ response <- liftIO $ httpHandler request
21+ let body = responseBody response
22+ let res = decode body :: Maybe DockerVersion
23+ return $ fromJust res
7
24
8listContainers :: Monad m => ListOpts -> DockerT m ([Container])
25listContainers :: Monad m => ListOpts -> DockerT m ([Container])
9listContainers = undefined
26listContainers = undefined
src/Docker/Internal.hs+1−1
@@ -30,7 +30,7 @@ mkHttpRequest verb e opts = request
30 -- TODO: manager = newManager defaultManagerSettings -- We likely need
30 -- TODO: manager = newManager defaultManagerSettings -- We likely need
31 -- this for TLS.
31 -- this for TLS.
32
32
33−defaultHttpHandler :: Request -> IO Response
33+defaultHttpHandler :: HttpHandler IO
34defaultHttpHandler request = do
34defaultHttpHandler request = do
35 manager <- newManager defaultManagerSettings
35 manager <- newManager defaultManagerSettings
36 response <- httpLbs request manager
36 response <- httpLbs request manager
src/Docker/Types.hs+1−1
@@ -54,7 +54,7 @@ type HttpHandler m = Request -> m Response
54type DockerT m a = ReaderT (DockerClientOpts, HttpHandler m) (ExceptT String m) a
54type DockerT m a = ReaderT (DockerClientOpts, HttpHandler m) (ExceptT String m) a
55
55
56runDockerT :: (Monad m) => (DockerClientOpts, HttpHandler m) -> DockerT m a -> m (Either String a)
56runDockerT :: (Monad m) => (DockerClientOpts, HttpHandler m) -> DockerT m a -> m (Either String a)
57−runDockerT opts a = runExceptT $ runReaderT a opts
57+runDockerT (opts, h) r = runExceptT $ runReaderT r (opts, h)
58-- runDockerT opts a = (runExceptT .) . flip runReaderT opts a
58-- runDockerT opts a = (runExceptT .) . flip runReaderT opts a
59
59
60data ListOpts = ListOpts { all :: Bool } deriving (Eq, Show)
60data ListOpts = ListOpts { all :: Bool } deriving (Eq, Show)