module Antiope.SNS ( publishMessage , subscribeTopic , module Antiope.SNS.Types , module Network.AWS.SNS ) where import Antiope.SNS.Types import Control.Lens import Control.Monad.IO.Unlift (MonadUnliftIO) import Data.Text (Text) import Network.AWS (HasEnv) import Network.AWS.SNS import qualified Network.AWS as AWS publishMessage :: (MonadUnliftIO m, HasEnv e) => e -> Topic -> Text -> m (Maybe MessageId) publishMessage e topicArn message = do resp <- AWS.runResourceT $ AWS.runAWS e $ AWS.send $ publish message & pTopicARN <>~ (topicArn ^. tTopicARN) return $ MessageId <$> resp ^. prsMessageId subscribeTopic :: (MonadUnliftIO m, HasEnv e) => e -> Topic -> Protocol -> Endpoint -> m (Maybe SubscriptionArn) subscribeTopic e topicArn (Protocol p) ep = case topicArn ^. tTopicARN of Just t -> do resp <- AWS.runResourceT $ AWS.runAWS e $ AWS.send $ subscribe t p & subEndpoint <>~ (ep ^. eEndpointARN) return $ SubscriptionArn <$> resp ^. srsSubscriptionARN Nothing -> return Nothing