45 lines
1.4 KiB
Haskell
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
|