module Network.PagerDuty.REST.Services.EmailFilters
(
createEmailFilter
, updateEmailFilter
, deleteEmailFilter
, MatchMode (..)
, HasEmailFilterInfo (..)
, EmailFilterInfo
, EmailFilter
, efId
) where
import Control.Applicative hiding (empty)
import Control.Lens hiding ((.=))
import Data.Aeson
import Data.Default.Class
import Data.Monoid
import Data.Text (Text)
import Network.HTTP.Types
import Network.PagerDuty.Internal.TH
import Network.PagerDuty.Internal.Types
default (Path)
filters :: ServiceId -> Path
filters s = "services" % s % "email_filters"
data MatchMode
= Always
| Match
| NoMatch
deriving (Eq, Show)
deriveNullaryWith hyphenated ''MatchMode
data EmailFilterInfo = EmailFilterInfo
{ _efSubjectMode' :: Maybe MatchMode
, _efSubjectRegex' :: Maybe Text
, _efBodyMode' :: Maybe MatchMode
, _efBodyRegex' :: Maybe Text
, _efFromEmailMode' :: Maybe MatchMode
, _efFromEmailRegex' :: Maybe Text
} deriving (Eq, Show)
deriveRecord ''EmailFilterInfo
instance Default EmailFilterInfo where
def = EmailFilterInfo Nothing Nothing Nothing Nothing Nothing Nothing
instance QueryLike EmailFilterInfo where
toQuery = const []
class HasEmailFilterInfo a where
emailFilterInfo :: Lens' a EmailFilterInfo
efSubjectMode :: Lens' a (Maybe MatchMode)
efSubjectRegex :: Lens' a (Maybe Text)
efBodyMode :: Lens' a (Maybe MatchMode)
efBodyRegex :: Lens' a (Maybe Text)
efFromEmailMode :: Lens' a (Maybe MatchMode)
efFromEmailRegex :: Lens' a (Maybe Text)
efSubjectMode = emailFilterInfo.efSubjectMode'
efSubjectRegex = emailFilterInfo.efSubjectRegex'
efBodyMode = emailFilterInfo.efBodyMode'
efBodyRegex = emailFilterInfo.efBodyRegex'
efFromEmailMode = emailFilterInfo.efFromEmailMode'
efFromEmailRegex = emailFilterInfo.efFromEmailRegex'
instance (QueryLike a, ToJSON a, HasEmailFilterInfo a)
=> HasEmailFilterInfo (Request a s b) where
emailFilterInfo = upd.emailFilterInfo
instance HasEmailFilterInfo EmailFilterInfo where
emailFilterInfo = id
data EmailFilter = EmailFilter
{ _efId :: EmailFilterId
, _efInfo :: EmailFilterInfo
} deriving (Eq, Show)
instance FromJSON EmailFilter where
parseJSON = withObject "email_filter" $ \o ->
EmailFilter <$> parseJSON (Object o)
<*> o .: "id"
instance ToJSON EmailFilter where
toJSON e = Object (x <> y)
where
Object x = toJSON (_efInfo e)
Object y = object ["id" .= _efId e]
instance HasEmailFilterInfo EmailFilter where
emailFilterInfo = lens _efInfo (\e x -> e { _efInfo = x })
makeLens "_efId" ''EmailFilter
createEmailFilter :: ServiceId -> Request EmailFilterInfo s EmailFilter
createEmailFilter s = mk def & meth .~ POST & path .~ filters s
updateEmailFilter :: ServiceId
-> EmailFilterId
-> Request EmailFilterInfo s Empty
updateEmailFilter s e = mk def & meth .~ PUT & path .~ filters s % e
deleteEmailFilter :: ServiceId -> EmailFilterId -> Request Empty s Empty
deleteEmailFilter s e = empty & meth .~ DELETE & path .~ filters s % e