@@ -86,6 +86,7 @@ module Docker.Client.Types (
8686 , NetworkType(..)
8787 , NetworkName
8888 , NetworkFilter(..)
89+ , defaultNetworkFilter
8990 , ConnectConfig(..)
9091 , defaultConnectConfig
9192 , DisconnectConfig(..)
@@ -163,7 +164,7 @@ data Endpoint =
163164 | DeleteImageEndpoint ImageDeleteOpts ImageID
164165 | CreateNetworkEndpoint CreateNetworkOpts
165166 | RemoveNetworkEndpoint NetworkID
166− | ListNetworksEndpoint [NetworkFilter]
167+ | ListNetworksEndpoint NetworkFilter
167168 | InspectNetworkEndpoint NetworkID
168169 | ConnectNetworkEndpoint NetworkID ConnectConfig
169170 | DisconnectNetworkEndpoint NetworkID DisconnectConfig
@@ -1016,24 +1017,34 @@ instance FromJSON NetworkType where
10161017 parseJSON (JSON.String "custom") = return CustomNetwork
10171018 parseJSON _ = fail "Failed to parse NetworkType"
10181019
1019−data NetworkFilter
1020− = NetworkFilterName Text
1021− | NetworkFilterID NetworkID
1022− | NetworkFilterLabel Text
1023− | NetworkFilterDriver NetworkMode
1024− | NetworkFilterScope NetworkScope
1025− | NetworkFilterType NetworkType
1026− deriving (Eq, Show)
1020+data NetworkFilter = NetworkFilter
1021+ { networkFilterNames :: [Text]
1022+ , networkFilterIDs :: [NetworkID]
1023+ , networkFilterDrivers :: [NetworkMode]
1024+ , networkFilterScopes :: [NetworkScope]
1025+ , networkFilterTypes :: [NetworkType]
1026+ , networkFilterLabels :: [(Text, (Maybe Text))]
1027+ } deriving (Eq, Show)
10271028
1028−instance {-# OVERLAPPING #-} ToJSON [NetworkFilter] where
1029− toJSON = object . fmap toKV
1029+instance ToJSON NetworkFilter where
1030+ toJSON nf = object . catMaybes $
1031+ [ "name" .=? networkFilterNames nf
1032+ , "id" .=? (fromNetworkID <$> networkFilterIDs nf)
1033+ , "driver" .=? (fromNetworkMode <$> networkFilterDrivers nf)
1034+ , "scope" .=? (fromNetworkScope <$> networkFilterScopes nf)
1035+ , "type" .=? (fromNetworkType <$> networkFilterTypes nf)
1036+ , "label" .=? (constructLabel <$> networkFilterLabels nf)
1037+ ]
10301038 where
1031− toKV (NetworkFilterName n) = "name" .= [n]
1032− toKV (NetworkFilterID i) = "id" .= [fromNetworkID i]
1033− toKV (NetworkFilterLabel l) = "label" .= [l]
1034− toKV (NetworkFilterDriver d) = "driver" .= [fromNetworkMode d]
1035− toKV (NetworkFilterScope s) = "scope" .= [fromNetworkScope s]
1036− toKV (NetworkFilterType t) = "type" .= [fromNetworkType t]
1039+ _ .=? [] = Nothing
1040+ k .=? l = Just $ k .= l
1041+
1042+constructLabel :: (Text, Maybe Text) -> Text
1043+constructLabel (k, Just v) = T.concat [k, "=", v]
1044+constructLabel (k, Nothing) = k
1045+
1046+defaultNetworkFilter :: NetworkFilter
1047+defaultNetworkFilter = NetworkFilter [] [] [] [] [] []
10371048
10381049data ConnectConfig = ConnectConfig
10391050 { connectContainer :: Text
@@ -1075,10 +1086,6 @@ instance ToJSON PruneFilter where
10751086 _ .=? [] = Nothing
10761087 k .=? l = Just $ k .= l
10771088
1078−constructLabel :: (Text, Maybe Text) -> Text
1079−constructLabel (k, Just v) = T.concat [k, "=", v]
1080−constructLabel (k, Nothing) = k
1081−
10821089defaultPruneFilter :: PruneFilter
10831090defaultPruneFilter = PruneFilter Nothing [] []
10841091