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