module Main where
import Data.Aeson
import Data.Maybe
import Control.Exception
import System.Environment
import Database.PostgreSQL.Replicant
main :: IO ()
main = do
dbUser <- fromMaybe "postgresql" <$> lookupEnv "PG_USER"
dbName <- fromMaybe "postgresql" <$> lookupEnv "PG_DATABASE"
dbHost <- fromMaybe "localhost" <$> lookupEnv "PG_HOST"
dbPort <- fromMaybe "5432" <$> lookupEnv "PG_PORT"
dbSlot <- fromMaybe "replicant_test" <$> lookupEnv "PG_SLOTNAME"
dbUpdateDelay <- fromMaybe "3000" <$> lookupEnv "PG_UPDATEDELAY"
let settings = PgSettings dbUser Nothing dbName dbHost dbPort dbSlot dbUpdateDelay
withLogicalStream settings $ \change -> do
putStrLn "Change received!"
print $ encode change
pure $ changeNextLSN change
`catch`
\exc -> do
putStrLn "Something bad happened: "
print @SomeException exc