reddit-pub/src/MyLib.hs

45 lines
1.4 KiB
Haskell

{-# 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