module Data.Validator.Draft4.String where import Import import Prelude import qualified Data.Text as T import Data.Text.Encoding (encodeUtf8) import qualified Text.Regex.PCRE.Heavy as RE import Data.Validator.Failure (Fail(..)) -------------------------------------------------- -- * maxLength -------------------------------------------------- -- | The spec requires @"maxLength"@ to be non-negative. maxLength :: Int -> Text -> Maybe (Fail ()) maxLength n x | n <= 0 = Nothing | T.length x > n = Just (Failure () (toJSON n) mempty (String x)) | otherwise = Nothing -------------------------------------------------- -- * minLength -------------------------------------------------- -- | The spec requires @"minLength"@ to be non-negative. minLength :: Int -> Text -> Maybe (Fail ()) minLength n x | n <= 0 = Nothing | T.length x < n = Just (Failure () (toJSON n) mempty (String x)) | otherwise = Nothing -------------------------------------------------- -- * pattern -------------------------------------------------- patternVal :: Text -> Text -> Maybe (Fail ()) patternVal t x = case RE.compileM (encodeUtf8 t) mempty of Left _ -> Just (Failure () (toJSON t) mempty (String x)) Right re -> if x RE.=~ re then Nothing else Just (Failure () (toJSON t) mempty (String x))