{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module Headroom.Regex
( compile'
, joinPatterns
, match'
)
where
import RIO
import qualified RIO.Text as T
import Text.Regex.PCRE.Light ( Regex
, compile
)
import Text.Regex.PCRE.Light.Char8 ( match
, utf8
)
compile' :: Text
-> Regex
compile' :: Text -> Regex
compile' regex :: Text
regex = ByteString -> [PCREOption] -> Regex
compile (Text -> ByteString
encodeUtf8 Text
regex) [PCREOption
utf8]
joinPatterns :: [Text]
-> Maybe Text
joinPatterns :: [Text] -> Maybe Text
joinPatterns [] = Maybe Text
forall a. Maybe a
Nothing
joinPatterns ps :: [Text]
ps = Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ Text -> [Text] -> Text
T.intercalate "|" [Text]
ps
match' :: Regex
-> Text
-> Maybe [Text]
match' :: Regex -> Text -> Maybe [Text]
match' regex :: Regex
regex subject :: Text
subject = (String -> Text) -> [String] -> [Text]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap String -> Text
T.pack ([String] -> [Text]) -> Maybe [String] -> Maybe [Text]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Regex -> String -> [PCREExecOption] -> Maybe [String]
match Regex
regex (Text -> String
T.unpack Text
subject) []