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

Reply via email to