diff --git a/reddit_tags/reddit-tags.cabal b/reddit_tags/reddit-tags.cabal index 4a27968..6998365 100644 --- a/reddit_tags/reddit-tags.cabal +++ b/reddit_tags/reddit-tags.cabal @@ -34,6 +34,7 @@ library , aeson , lens , lens-aeson + , transformers hs-source-dirs: src default-language: Haskell2010 diff --git a/reddit_tags/src/MyLib.hs b/reddit_tags/src/MyLib.hs index e657c44..a4d3dda 100644 --- a/reddit_tags/src/MyLib.hs +++ b/reddit_tags/src/MyLib.hs @@ -1,4 +1,39 @@ +{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE OverloadedStrings #-} module MyLib (someFunc) where +import System.Environment (lookupEnv) +import Control.Monad.Trans.Maybe (MaybeT(..)) +import Network.AMQP +import qualified Data.Text as T +import Data.Text (Text) +import Control.Exception (bracket) +import Control.Concurrent (newEmptyMVar, readMVar) +import Control.Monad (void) + +data AMQP = AMQP + { host :: String + , vhost :: Text + , username :: Text + , password :: Text + } + +getAMQP :: IO (Maybe AMQP) +getAMQP = runMaybeT $ + AMQP <$> lookupEnvM "AMQP_HOST" <*> lookupEnvMText "AMQP_VHOST" <*> lookupEnvMText "AMQP_USER" <*> lookupEnvMText "AMQP_PASS" + where + lookupEnvM = MaybeT . lookupEnv + lookupEnvMText = fmap T.pack . lookupEnvM someFunc :: IO () -someFunc = putStrLn "someFunc" +someFunc = do + Just AMQP{..} <- getAMQP + let rabbitConnect = openConnection host vhost username password + bracket rabbitConnect closeConnection $ \conn -> do + chan <- openChannel conn + qos chan 0 1 False + declareQueue chan newQueue {queueName="reddit_tags"} + bindQueue chan "reddit_tags" "reddit_posts" "key" + consumeMsgs chan "reddit_tags" Ack $ \(msg, env) -> do + print msg + ackEnv env + void getLine