seihou-core-0.6.0.0: src/Seihou/Effect/ProcessPure.hs
module Seihou.Effect.ProcessPure
( runProcessPure,
ProcessMock (..),
)
where
import Data.Generics.Labels ()
import Seihou.Effect.Process (Process (..))
import Seihou.Prelude
import System.Exit (ExitCode (..))
data ProcessMock = ProcessMock
{ command :: !Text,
args :: ![Text],
result :: !(ExitCode, Text, Text)
}
deriving stock (Eq, Generic, Show)
runProcessPure :: [ProcessMock] -> Eff (Process : es) a -> Eff es a
runProcessPure mocks = interpret $ \_ -> \case
RunProcess cmd args _workDir ->
case findMock cmd args mocks of
Just result -> pure result
Nothing -> pure (ExitFailure 127, "", "command not found: " <> cmd)
findMock :: Text -> [Text] -> [ProcessMock] -> Maybe (ExitCode, Text, Text)
findMock _ _ [] = Nothing
findMock cmd args (m : ms)
| m ^. #command == cmd && m ^. #args == args = Just (m ^. #result)
| otherwise = findMock cmd args ms