module Hix.Managed.Handlers.StateFile.Test where

import Data.IORef (IORef, modifyIORef, newIORef)

import Hix.Data.Monad (M)
import Hix.Data.NixExpr (Expr)
import Hix.Managed.Handlers.StateFile (StateFileHandlers (StateFileHandlers, writeFile))

writeFileIORef ::
  IORef [Expr] ->
  Maybe a ->
  Expr ->
  M ()
writeFileIORef :: forall a. IORef [Expr] -> Maybe a -> Expr -> M ()
writeFileIORef IORef [Expr]
out Maybe a
_ Expr
expr =
  IO () -> M ()
forall a. IO a -> M a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> M ()) -> IO () -> M ()
forall a b. (a -> b) -> a -> b
$ IORef [Expr] -> ([Expr] -> [Expr]) -> IO ()
forall a. IORef a -> (a -> a) -> IO ()
modifyIORef IORef [Expr]
out (Expr
expr :)

handlersUnitTest ::
  MonadIO m =>
  m (StateFileHandlers, IORef [Expr])
handlersUnitTest :: forall (m :: * -> *).
MonadIO m =>
m (StateFileHandlers, IORef [Expr])
handlersUnitTest = do
  IORef [Expr]
ref <- IO (IORef [Expr]) -> m (IORef [Expr])
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO ([Expr] -> IO (IORef [Expr])
forall a. a -> IO (IORef a)
newIORef [])
  let handlers :: StateFileHandlers
handlers = StateFileHandlers {writeFile :: Maybe (Path Abs Dir) -> Expr -> M ()
writeFile = IORef [Expr] -> Maybe (Path Abs Dir) -> Expr -> M ()
forall a. IORef [Expr] -> Maybe a -> Expr -> M ()
writeFileIORef IORef [Expr]
ref}
  (StateFileHandlers, IORef [Expr])
-> m (StateFileHandlers, IORef [Expr])
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (StateFileHandlers
handlers, IORef [Expr]
ref)