module Web.Heroku.RabbitMQ ( AmqpSettings(..) , amqpConnSettings , parseAmqpUrl ) where import Control.Monad import Data.Text ( Text, pack ) import System.Environment data AmqpSettings = AmqpSettings { amqpHostName :: !String , amqpVirtualHost :: !Text , amqpUser :: !Text , amqpPass :: !Text , amqpPort :: !Int } deriving (Show, Eq) amqpConnSettings :: IO AmqpSettings amqpConnSettings = liftM parseAmqpUrl (getEnv "RABBITMQ_BIGWIG_URL") parseAmqpUrl :: String -> AmqpSettings parseAmqpUrl = parse . pieces "" [] . trimProtocol where parse :: [String] -> AmqpSettings parse [ user , pass , host , port , vhst ] = AmqpSettings host (pack vhst) (pack user) (pack pass) (read port) parse _ = error "Unexpected environment variable format." trimProtocol :: String -> String trimProtocol ('a':'m':'q':'p':':':'/':'/':rest) = rest trimProtocol str = str pieces acc ys [] = reverse (reverse acc:ys) pieces acc ys (x:xs) | x `elem` "@:/" = pieces "" (reverse acc:ys) xs | otherwise = pieces (x:acc) ys xs