{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ConstraintKinds  #-}

module Network.AWS.Flow.S3
  ( putObjectAction
  ) where

import Control.Monad.Reader      ( asks )
import Control.Monad.Trans.AWS   ( send_, sourceBody )
import Data.Conduit.Binary       ( sourceLbs )
import Network.AWS.Flow.Types
import Network.AWS.Flow.Internal ( runAWS )
import Network.AWS.S3     hiding ( bucket )

-- Actions

putObjectAction :: MonadFlow m => Artifact -> m ()
putObjectAction (key, hash, size, blob) = do
  bucket <- asks feBucket
  runAWS feEnv $
    send_ $ putObject body bucket key where
      body = sourceBody hash size $ sourceLbs blob