{-# LANGUAGE OverloadedStrings #-} module MyLib (someFunc) where import Control.Exception (bracket) import Control.Lens import Data.Config import qualified Data.Text.Strict.Lens as T import Network.AMQP import Network.AMQP.Reddit (publishEntries) import Network.Wreq.Session (newSession) import Data.Text (Text) import qualified Data.ByteString.Lazy as LB import Control.Monad (void) import qualified Data.Aeson as A import Data.Functor.Contravariant ((>$<)) import Publish (Publish(..)) import Data.Foldable (for_) amqpPublisher :: Channel -> Text -> Publish IO LB.ByteString amqpPublisher channel exchange = Publish $ \lbs -> void $ publishMsg channel exchange "" (message lbs) where message lbs = newMsg { msgBody = lbs , msgDeliveryMode = Just Persistent } someFunc :: IO () someFunc = do conf <- readConfig "./config.dhall" let connect = openConnection (conf ^. amqp . host . T.unpacked) (conf ^. amqp . vhost) (conf ^. amqp . username) (conf ^. amqp . password) bracket connect closeConnection $ \conn -> do putStrLn "Hello" chan <- openChannel conn declareExchange chan newExchange { exchangeName = "reddit_posts", exchangeType = "fanout" } sess <- newSession let encoder = amqpPublisher chan "reddit_posts" for_ (conf ^. fetchers) $ \fetcher -> do print fetcher publishEntries (A.encode >$< encoder) sess fetcher