module Control.Distributed.Fork.LocalProcessBackend where

--------------------------------------------------------------------------------
import qualified Data.ByteString.Lazy               as BL
import           System.Process.Typed
--------------------------------------------------------------------------------
import           Control.Distributed.Fork.Backend
--------------------------------------------------------------------------------

-- |
-- A 'Backend' which uses local processes as executors. Useful for testing.
localProcessBackend :: Backend
localProcessBackend = Backend $ \stdin' -> do
  executable <- liftIO getExecutablePath
  let conf =
        setStdin (byteStringInput $ BL.fromStrict stdin') $
        proc executable [argExecutorMode]
  liftIO . fmap BL.toStrict $ readProcessStdout_ conf