@@ -1,23 +1,47 @@
11module Docker.Types where
22
3−import Data.Aeson (FromJSON, ToJSON, genericParseJSON,
4− genericToJSON, parseJSON, toJSON)
5−import Data.Aeson.Types (defaultOptions, fieldLabelModifier)
6−import Data.Char (toUpper)
7−import Data.Text (Text)
8−import GHC.Generics (Generic)
3+import Control.Monad.Except (ExceptT, runExceptT)
4+import Control.Monad.Reader (ReaderT, runReaderT)
5+import Data.Aeson (FromJSON, ToJSON, genericParseJSON,
6+ genericToJSON, parseJSON, toJSON)
7+import Data.Aeson.Types (defaultOptions, fieldLabelModifier)
8+import qualified Data.ByteString.Lazy as BL
9+import Data.Char (toUpper)
10+import Data.Text (Text)
11+import qualified Data.Text as T
12+import GHC.Generics (Generic)
13+import qualified Network.HTTP.Client as HTTP
914
15+type Endpoint = Text
1016type URL = Text
1117type ApiVersion = Text
1218
13−data DockerClientOpts = DockerClientOpts {
14− apiVersion :: ApiVersion
19+type Request = HTTP.Request
20+type Response = HTTP.Response BL.ByteString
21+
22+data DockerClientOpts m = DockerClientOpts {
23+ http :: Request -> m Response
24+ , apiVersion :: ApiVersion
1525 , baseUrl :: URL
16− } deriving (Show)
26+ }
27+
28+type DockerT m a = ReaderT (DockerClientOpts m) (ExceptT String m) a
29+
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
33+
34+data ListOpts = ListOpts
35+ { all :: Bool
36+ } deriving (Eq, Show, Generic)
37+
38+instance ToJSON ListOpts
39+instance FromJSON ListOpts
1740
18−defaultClientOpts :: DockerClientOpts
41+defaultClientOpts :: DockerClientOpts IO
1942defaultClientOpts = DockerClientOpts
20− { apiVersion = "v1.22"
43+ { http = undefined
44+ , apiVersion = "v1.22"
2145 , baseUrl = "http://127.0.0.1:2375/"
2246 }
2347
@@ -31,10 +55,16 @@ data DockerVersion = DockerVersion
3155
3256
3357instance ToJSON DockerVersion where
34− toJSON = genericToJSON defaultOptions {
35− fieldLabelModifier = (\(x:xs) -> toUpper x : xs)}
58+ toJSON = genericToJSON defaultOptions {
59+ fieldLabelModifier = (\(x:xs) -> toUpper x : xs)}
3660
3761instance FromJSON DockerVersion where
38− parseJSON = genericParseJSON defaultOptions {
39− fieldLabelModifier = (\(x:xs) -> toUpper x : xs)}
62+ parseJSON = genericParseJSON defaultOptions {
63+ fieldLabelModifier = (\(x:xs) -> toUpper x : xs)}
64+
65+
66+data Container = Container
67+
68+data Image = Image
69+
4070