We don't add a type class for fully-generic handling, but we do
abstract the duplicate part.

Signed-off-by: Iustin Pop <[email protected]>
---
 htools/Ganeti/Query/Query.hs |   20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/htools/Ganeti/Query/Query.hs b/htools/Ganeti/Query/Query.hs
index 562fc62..23bdbbd 100644
--- a/htools/Ganeti/Query/Query.hs
+++ b/htools/Ganeti/Query/Query.hs
@@ -193,21 +193,21 @@ queryInner cfg _ (Query QRGroup fields qfilter) wanted = 
return $ do
 queryInner _ _ (Query qkind _ _) _ =
   return . Bad $ "Query '" ++ show qkind ++ "' not supported"
 
+-- | Helper for 'queryFields'.
+fieldsExtractor :: FieldMap a b -> [FilterField] -> QueryFieldsResult
+fieldsExtractor fieldsMap fields =
+  let selected = if null fields
+                   then map snd $ Map.toAscList fieldsMap
+                   else getSelectedFields fieldsMap fields
+  in QueryFieldsResult (map fst selected)
+
 -- | Query fields call.
--- FIXME: Looks generic enough to use a typeclass
 queryFields :: QueryFields -> Result QueryFieldsResult
 queryFields (QueryFields QRNode fields) =
-  let selected = if null fields
-                   then map snd $ Map.toAscList nodeFieldsMap
-                   else getSelectedFields nodeFieldsMap fields
-  in Ok $ QueryFieldsResult (map fst selected)
+  Ok $ fieldsExtractor nodeFieldsMap fields
 
 queryFields (QueryFields QRGroup fields) =
-  let selected = if null fields
-                   then map snd $ Map.toAscList groupFieldsMap
-                   else getSelectedFields groupFieldsMap fields
-  in Ok $ QueryFieldsResult (map fst selected)
-
+  Ok $ fieldsExtractor groupFieldsMap fields
 
 queryFields (QueryFields qkind _) =
   Bad $ "QueryFields '" ++ show qkind ++ "' not supported"
-- 
1.7.10.4

Reply via email to