@@ -1,23 +1,47 @@
1module Docker.Types where
1module Docker.Types where
3+import Control.Monad.Except (ExceptT, runExceptT)
4+import Control.Monad.Reader (ReaderT, runReaderT)
3−import Data.Aeson (FromJSON, ToJSON, genericParseJSON,
5+import Data.Aeson (FromJSON, ToJSON, genericParseJSON,
4− genericToJSON, parseJSON, toJSON)
6+ genericToJSON, parseJSON, toJSON)
5−import Data.Aeson.Types (defaultOptions, fieldLabelModifier)
7+import Data.Aeson.Types (defaultOptions, fieldLabelModifier)
8+import qualified Data.ByteString.Lazy as BL
6−import Data.Char (toUpper)
9+import Data.Char (toUpper)
7−import Data.Text (Text)
10+import Data.Text (Text)
11+import qualified Data.Text as T
8−import GHC.Generics (Generic)
12+import GHC.Generics (Generic)
13+import qualified Network.HTTP.Client as HTTP
10type URL = Text
16type URL = Text
11type ApiVersion = Text
17type ApiVersion = Text
19+type Request = HTTP.Request
20+type Response = HTTP.Response BL.ByteString
13−data DockerClientOpts = DockerClientOpts {
22+data DockerClientOpts m = DockerClientOpts {
23+ http :: Request -> m Response
14− apiVersion :: ApiVersion
24+ , apiVersion :: ApiVersion
15 , baseUrl :: URL
25 , baseUrl :: URL
28+type DockerT m a = ReaderT (DockerClientOpts m) (ExceptT String m) a
30+runDockerT :: (Monad m) => DockerClientOpts m -> DockerT m a -> m (Either String a)
31+runDockerT opts a = runExceptT $ runReaderT a opts
32+-- runDockerT opts a = (runExceptT .) . flip runReaderT opts a
34+data ListOpts = ListOpts
16− } deriving (Show)
36+ } deriving (Eq, Show, Generic)
38+instance ToJSON ListOpts
39+instance FromJSON ListOpts
18−defaultClientOpts :: DockerClientOpts
41+defaultClientOpts :: DockerClientOpts IO
19defaultClientOpts = DockerClientOpts
42defaultClientOpts = DockerClientOpts
20− { apiVersion = "v1.22"
44+ , apiVersion = "v1.22"
21 , baseUrl = "http://127.0.0.1:2375/"
45 , baseUrl = "http://127.0.0.1:2375/"
@@ -31,10 +55,16 @@ data DockerVersion = DockerVersion
33instance ToJSON DockerVersion where
57instance ToJSON DockerVersion where
34− toJSON = genericToJSON defaultOptions {
58+ toJSON = genericToJSON defaultOptions {
35− fieldLabelModifier = (\(x:xs) -> toUpper x : xs)}
59+ fieldLabelModifier = (\(x:xs) -> toUpper x : xs)}
37instance FromJSON DockerVersion where
61instance FromJSON DockerVersion where
38− parseJSON = genericParseJSON defaultOptions {
62+ parseJSON = genericParseJSON defaultOptions {
39− fieldLabelModifier = (\(x:xs) -> toUpper x : xs)}
63+ fieldLabelModifier = (\(x:xs) -> toUpper x : xs)}
66+data Container = Container