@@ -1,13 +1,15 @@
1module Docker.Types where
1module Docker.Types where
3+import Control.Monad (mzero)
3import Control.Monad.Except (ExceptT, runExceptT)
4import Control.Monad.Except (ExceptT, runExceptT)
4import Control.Monad.Reader (ReaderT, runReaderT)
5import Control.Monad.Reader (ReaderT, runReaderT)
5import Data.Aeson (FromJSON, ToJSON, encode,
6import Data.Aeson (FromJSON, ToJSON, encode,
6− genericParseJSON, genericToJSON,
7+ genericParseJSON, genericToJSON, object,
7− parseJSON, toJSON)
8+ parseJSON, toJSON, (.:), (.=))
8import Data.Aeson.Types (defaultOptions, fieldLabelModifier)
9import Data.Aeson.Types (defaultOptions, fieldLabelModifier)
9import qualified Data.ByteString.Lazy as BL
10import qualified Data.ByteString.Lazy as BL
10import Data.Char (toUpper)
11import Data.Char (toUpper)
12+import qualified Data.Map as M
11import Data.Text (Text)
13import Data.Text (Text)
12import qualified Data.Text as T
14import qualified Data.Text as T
13import GHC.Generics (Generic)
15import GHC.Generics (Generic)
@@ -26,9 +28,9 @@ type Response = HTTP.Response BL.ByteString
26data Signal = SIGINT | SIGKILL deriving (Eq, Show)
28data Signal = SIGINT | SIGKILL deriving (Eq, Show)
28data DockerClientOpts m = DockerClientOpts {
30data DockerClientOpts m = DockerClientOpts {
29− http :: Request -> m Response
31+ http :: Request -> m Response
30− , apiVersion :: ApiVersion
32+ , apiVer :: ApiVersion
31− , baseUrl :: URL
33+ , baseUrl :: URL
34type DockerT m a = ReaderT (DockerClientOpts m) (ExceptT String m) a
36type DockerT m a = ReaderT (DockerClientOpts m) (ExceptT String m) a
@@ -42,16 +44,19 @@ data ListOpts = ListOpts { all :: Bool } deriving (Eq, Show)
42defaultClientOpts :: DockerClientOpts IO
44defaultClientOpts :: DockerClientOpts IO
43defaultClientOpts = DockerClientOpts {
45defaultClientOpts = DockerClientOpts {
44 http = undefined
46 http = undefined
45− , apiVersion = "v1.22"
47+ , apiVer = "v1.22"
46 , baseUrl = "http://127.0.0.1:2375/"
48 , baseUrl = "http://127.0.0.1:2375/"
49data DockerVersion = DockerVersion {
51data DockerVersion = DockerVersion {
50 version :: Text
52 version :: Text
53+ , apiVersion :: ApiVersion
51 , gitCommit :: Text
54 , gitCommit :: Text
52 , goVersion :: Text
55 , goVersion :: Text
53 , arch :: Text
57 , arch :: Text
54 , kernelVersion :: Text
58 , kernelVersion :: Text
55 } deriving (Show, Eq, Generic)
60 } deriving (Show, Eq, Generic)
@@ -63,21 +68,37 @@ instance FromJSON DockerVersion where
63 parseJSON = genericParseJSON defaultOptions {
68 parseJSON = genericParseJSON defaultOptions {
64 fieldLabelModifier = (\(x:xs) -> toUpper x : xs)}
69 fieldLabelModifier = (\(x:xs) -> toUpper x : xs)}
67data Container = Container
71data Container = Container
69−data Image = Image
76+data Image = DockerImage {
78+ , imageCreated :: Integer
79+ , imageParentId :: Maybe ImageID
80+ , imageRepoTags :: [Tag]
81+ , imageRepoDigests :: [Digest]
82+ , imageSize :: Integer
83+ , imageVirtualSize :: Integer
84+ } deriving (Show, Eq, Generic)
86+dropImagePrefix = drop 5
88+instance FromJSON Image where
89+ parseJSON = genericParseJSON defaultOptions {
90+ fieldLabelModifier = dropImagePrefix}
71data CreateOpts = CreateOpts
92data CreateOpts = CreateOpts
72data StartOpts = StartOpts
93data StartOpts = StartOpts
74data DeleteOpts = DeleteOpts {
95data DeleteOpts = DeleteOpts {
75− v :: Bool
96+ deleteVolumes :: Bool
76− , force :: Bool
97+ , force :: Bool
77 } deriving (Eq, Show)
98 } deriving (Eq, Show)
79type Timestamp = Integer
100type Timestamp = Integer
80−data Tail = Integer | All deriving (Eq, Show)
101+data TailLogOpt = Tail Integer | All deriving (Eq, Show)
82data LogOpts = LogOpts {
103data LogOpts = LogOpts {
83 follow :: Bool
104 follow :: Bool
@@ -85,5 +106,6 @@ data LogOpts = LogOpts {
85 , stderr :: Bool
106 , stderr :: Bool
86 , since :: Timestamp
107 , since :: Timestamp
87 , timestamps :: Bool
108 , timestamps :: Bool
88− , tail :: Tail
109+ , tail :: TailLogOpt
89 } deriving (Eq, Show)
110 } deriving (Eq, Show)