From b04dc2425a7b743a2b1927b61169ba2526bf1403 Mon Sep 17 00:00:00 2001
From: Iustin Pop <iustin@google.com>
Date: Thu, 4 Oct 2012 00:27:59 +0100
Subject: [PATCH] Simplify a bit queryFields

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

Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Agata Murawska <agatamurawska@google.com>
---
 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 f9d7f4679..b0090faa3 100644
--- a/htools/Ganeti/Query/Query.hs
+++ b/htools/Ganeti/Query/Query.hs
@@ -191,21 +191,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"
-- 
GitLab