( compileFilter
, evaluateFilter
, requestedNames
- , FilterConstructor
, makeSimpleFilter
- , makeHostnameFilter
) where
import Control.Applicative
import Control.Monad (liftM)
import qualified Data.Map as Map
-import Data.Maybe (fromJust)
import Data.Traversable (traverse)
import Text.JSON (JSValue(..), fromJSString)
import Text.JSON.Pretty (pp_value)
else Nothing
requestedNames _ _ = Nothing
-
-type FilterConstructor = String -> [Either String Integer] -> Filter FilterField
-
-- | Builds a simple filter from a list of names.
makeSimpleFilter :: String -> [Either String Integer] -> Filter FilterField
makeSimpleFilter _ [] = EmptyFilter
makeSimpleFilter namefield vals =
OrFilter $ map (EQFilter namefield . either QuotedString NumericValue) vals
-
--- | List of symbols with a special meaning for regular expressions.
-reSpecialSymbols :: String
-reSpecialSymbols = "\\.|()[]"
-
--- | Quote symbols that have special meaning in regular expressions.
-quoteForRegex :: String -> String
-quoteForRegex s = s >>= \x ->
- if x `elem` reSpecialSymbols then ['\\', x] else [x]
-
--- | Builds a filter for hostnames from a list of names.
-makeHostnameFilter :: String -> [Either String Integer] -> Filter FilterField
-makeHostnameFilter _ [] = EmptyFilter
-makeHostnameFilter namefield vals =
- OrFilter . flip map vals
- $ either (RegexpFilter namefield . fromJust . mkRegex
- . (\ s -> "^(" ++ s ++ "|" ++ s ++ "\\..*)$")
- . quoteForRegex)
- (EQFilter namefield . NumericValue)