2012/10/5 Iustin Pop <[email protected]>: > 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 >
LGTM
