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
