packages feed

rds-data-codecs-0.0.0.1: app/App/Cli/Run/ExecuteStatement.hs

{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE TypeApplications #-}

module App.Cli.Run.ExecuteStatement
  ( runExecuteStatementCmd
  ) where

import Amazonka.RDSData
import App.AWS.Env
import App.Config
import Control.Lens
import Control.Monad.IO.Class
import Data.Generics.Product.Any

import qualified App.Cli.Types              as CLI
import qualified Amazonka                   as AWS
import qualified Data.Aeson                 as J
import qualified Data.ByteString.Lazy       as LBS
import qualified Data.Text.Encoding         as T
import qualified Data.Text.IO               as T
import qualified System.IO.Unsafe           as IO

runExecuteStatementCmd :: CLI.ExecuteStatementCmd -> IO ()
runExecuteStatementCmd cmd = do
  let theAwsLogLevel   = cmd ^. the @"mAwsLogLevel"
  let theMHostEndpoint = cmd ^. the @"mHostEndpoint"
  let theRegion        = cmd ^. the @"region"
  let theResourceArn   = cmd ^. the @"resourceArn"
  let theSecretArn     = cmd ^. the @"secretArn"
  let theSql           = cmd ^. the @"sql"

  envAws <-
    liftIO (IO.unsafeInterleaveIO (mkEnv theRegion (awsLogger theAwsLogLevel)))
      <&> applyMHostEndpoint theMHostEndpoint

  let req = newExecuteStatement theResourceArn theSecretArn theSql

  AWS.runResourceT $ do
    res <- AWS.send envAws req

    liftIO . T.putStrLn $ T.decodeUtf8 $ LBS.toStrict $ J.encode res