packages feed

aws-ses-easy-0.1.0: library/Aws/Ses/Easy/Service.hs

module Aws.Ses.Easy.Service
  ( Service(..)
  , sendEmail'
  ) where

import qualified Network.AWS as Aws
import qualified Network.AWS.SES as Aws
import Aws.Ses.Easy.Email (Email, fromEmail)
import Control.Exception.Lens (catching_)
import Control.Monad.Reader (MonadReader(..), asks)
import Control.Monad.IO.Class (MonadIO(..))
import Control.Monad.Catch (MonadCatch(..))


class Monad m => Service m where
  sendEmail :: Email -> m () -> m ()

sendEmail' :: (MonadIO m, MonadReader s m, MonadCatch m) => (s -> Aws.Env) -> Email -> m () -> m ()
sendEmail' getEnv email failed = do
  env <- asks getEnv
  let msg = fromEmail email
  _ <- catching_ Aws._MessageRejected (awsSendEmail env msg >> return ()) failed
  return ()
  where
    awsSendEmail env msg = liftIO $ Aws.runResourceT . Aws.runAWS env $ Aws.send msg