packages feed

hw-polysemy-0.2.12.0: testcontainers-localstack/HaskellWorks/Polysemy/Amazonka/LocalStack.hs

{- HLINT ignore "Use let" -}

module HaskellWorks.Polysemy.Amazonka.LocalStack
  ( runReaderLocalAwsEnvDiscover
  ) where

import qualified Amazonka                               as AWS
import qualified Amazonka.Auth                          as AWS
import           Control.Lens                           ((%~), (.~), (^.))
import           Data.Generics.Product.Any
import           HaskellWorks.Prelude
import           HaskellWorks.TestContainers.LocalStack
import           Polysemy
import           Polysemy.Reader
import qualified System.IO                              as IO

runReaderLocalAwsEnvDiscover :: ()
  => Member (Embed IO) r
  => IO LocalStackEndpoint
  -> Sem (Reader AWS.Env : r) a
  -> Sem r a
runReaderLocalAwsEnvDiscover mk f = do
  ep <- embed mk

  logger' <- embed $ AWS.newLogger AWS.Debug IO.stdout

  let creds = AWS.fromKeys (AWS.AccessKey "test") (AWS.SecretKey "test")

  credEnv <- embed $ AWS.newEnv (AWS.runCredentialChain [pure . creds])

  awsEnv <- pure $
    credEnv
      & the @"logger" .~ logger'
      & the @"overrides" %~ (. AWS.setEndpoint False "localhost" (ep ^. the @"port"))

  runReader awsEnv f