on master help sign in
Adds basic layout

Caries errror and reader and add runDockerT.

commit4e85f3f4eba0b14f5a40e5a56861296ea00aea5b authorDeni Bertovic <deni@denibertovic.com> dateThu 3 Mar 2016, 12:31 (11 years ago) parenta6e57ee
2 files changed+55−15
src/Docker.hs+10 src/Docker/Types.hs+45−15
src/Docker.hs+10
@@ -1,2 +1,12 @@
11module Docker where
22
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 @@
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