@@ -90,6 +90,9 @@ module Docker.Client.Types (
90 , defaultConnectConfig
90 , defaultConnectConfig
91 , DisconnectConfig(..)
91 , DisconnectConfig(..)
92 , defaultDisconnectConfig
92 , defaultDisconnectConfig
95+ , NetworksDeleted(..)
93 , EndpointSettings(..)
96 , EndpointSettings(..)
94 , defaultEndpointSettings
97 , defaultEndpointSettings
95 , IPAMSettings(..)
98 , IPAMSettings(..)
@@ -118,6 +121,7 @@ module Docker.Client.Types (
118 , MemoryConstraintSize(..)
121 , MemoryConstraintSize(..)
124+import Control.Monad (join)
121import Data.Aeson (FromJSON, ToJSON, genericParseJSON,
125import Data.Aeson (FromJSON, ToJSON, genericParseJSON,
122 genericToJSON, object, parseJSON, toJSON,
126 genericToJSON, object, parseJSON, toJSON,
123 (.!=), (.:), (.:?), (.=))
127 (.!=), (.:), (.:?), (.=))
@@ -125,6 +129,7 @@ import qualified Data.Aeson as JSON
125import Data.Aeson.Types (defaultOptions, fieldLabelModifier)
129import Data.Aeson.Types (defaultOptions, fieldLabelModifier)
126import Data.Char (isAlphaNum, toUpper)
130import Data.Char (isAlphaNum, toUpper)
127import qualified Data.HashMap.Strict as HM
131import qualified Data.HashMap.Strict as HM
132+import Data.Maybe (maybeToList, catMaybes)
128import Data.Monoid ((<>))
133import Data.Monoid ((<>))
129import Data.Scientific (floatingOrInteger)
134import Data.Scientific (floatingOrInteger)
130import Data.Text (Text)
135import Data.Text (Text)
@@ -162,6 +167,7 @@ data Endpoint =
162 | InspectNetworkEndpoint NetworkID
167 | InspectNetworkEndpoint NetworkID
163 | ConnectNetworkEndpoint NetworkID ConnectConfig
168 | ConnectNetworkEndpoint NetworkID ConnectConfig
164 | DisconnectNetworkEndpoint NetworkID DisconnectConfig
169 | DisconnectNetworkEndpoint NetworkID DisconnectConfig
170+ | PruneNetworksEndpoint PruneFilter
165 deriving (Eq, Show)
171 deriving (Eq, Show)
167-- | We should newtype this
173-- | We should newtype this
@@ -1051,6 +1057,39 @@ instance ToJSON DisconnectConfig where
1051defaultDisconnectConfig :: Text -> DisconnectConfig
1057defaultDisconnectConfig :: Text -> DisconnectConfig
1052defaultDisconnectConfig = flip DisconnectConfig False
1058defaultDisconnectConfig = flip DisconnectConfig False
1060+data PruneFilter = PruneFilter
1061+ { pruneFilterUntil :: Maybe Text
1062+ -- ^ Can be a Unix timestamp, a date-formatted timestamp, or a duration,
1063+ -- such as @10m@ or @1h30m@.
1064+ , pruneFilterIncludeLabels :: [(Text, (Maybe Text))]
1065+ , pruneFilterExcludeLabels :: [(Text, (Maybe Text))]
1066+ } deriving (Eq, Show)
1068+instance ToJSON PruneFilter where
1069+ toJSON pf = object . catMaybes $
1070+ [ "until" .=? maybeToList (pruneFilterUntil pf)
1071+ , "label" .=? (constructLabel <$> pruneFilterIncludeLabels pf)
1072+ , "label!" .=? (constructLabel <$> pruneFilterExcludeLabels pf)
1076+ k .=? l = Just $ k .= l
1078+constructLabel :: (Text, Maybe Text) -> Text
1079+constructLabel (k, Just v) = T.concat [k, "=", v]
1080+constructLabel (k, Nothing) = k
1082+defaultPruneFilter :: PruneFilter
1083+defaultPruneFilter = PruneFilter Nothing [] []
1085+newtype NetworksDeleted = NetworksDeleted [Text]
1086+ deriving (Eq, Show)
1088+instance FromJSON NetworksDeleted where
1089+ parseJSON (JSON.Object o) =
1090+ NetworksDeleted . join . maybeToList <$> o .: "NetworksDeleted"
1091+ parseJSON _ = fail $ "NetworksDeleted is not an object"
1054data EndpointSettings = EndpointSettings
1093data EndpointSettings = EndpointSettings
1055 { endpointIPAMConfig :: IPAMSettings
1094 { endpointIPAMConfig :: IPAMSettings
1056 , endpointLinks :: [Text]
1095 , endpointLinks :: [Text]