on master help sign in
Adds basic layout
4e85f3fDeni Bertovic
src/Docker.hs+10
@@ -1,2 +1,12 @@
1module Docker where
1module Docker where
2
2
3+import Docker.Types
4+
5+getDockerVersion :: Monad m => DockerT m (DockerVersion)
6+getDockerVersion = undefined
7+
8+listContainers :: Monad m => ListOpts -> DockerT m ([Container])
9+listContainers = undefined
10+
11+listImages :: Monad m => ListOpts -> DockerT m ([Image])
12+listImages = undefined
src/Docker/Types.hs+45−15
@@ -1,23 +1,47 @@
1module Docker.Types where
1module Docker.Types where
2
2
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
9
14
15+type Endpoint = Text
10type URL = Text
16type URL = Text
11type ApiVersion = Text
17type ApiVersion = Text
12
18
19+type Request = HTTP.Request
20+type Response = HTTP.Response BL.ByteString
21+
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
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
16− } deriving (Show)
36+ } deriving (Eq, Show, Generic)
37+
38+instance ToJSON ListOpts
39+instance FromJSON ListOpts
17
40
18−defaultClientOpts :: DockerClientOpts
41+defaultClientOpts :: DockerClientOpts IO
19defaultClientOpts = DockerClientOpts
42defaultClientOpts = DockerClientOpts
43+ { http = undefined
20− { apiVersion = "v1.22"
44+ , apiVersion = "v1.22"
21 , baseUrl = "http://127.0.0.1:2375/"
45 , baseUrl = "http://127.0.0.1:2375/"
22 }
46 }
23
47
@@ -31,10 +55,16 @@ data DockerVersion = DockerVersion
31
55
32
56
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)}
36
60
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)}
64+
65+
66+data Container = Container
67+
68+data Image = Image
69+
40
70