{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Regfish.AcidState where import Control.Exception (bracket) import Control.Lens import Control.Monad.Reader import Data.Acid import Data.SafeCopy (SafeCopy) import Regfish.Types import Network.HTTP.Client (CookieJar) -- TODO Regfish.Types.CookieJar ? withLocalState :: (IsAcidic q, SafeCopy q) => q -> (AcidState q -> IO a) -> IO a withLocalState initialState a = bracket (liftIO $ openLocalState initialState) --(liftIO . createCheckpointAndClose) (liftIO . closeAcidState) (\q -> createArchive q >> a q) cookieJarQuery :: Query RFState CookieJar cookieJarQuery = asks _cookieJar cookieJarUpdate :: CookieJar -> Update RFState () cookieJarUpdate = (cookieJar .=) dumpQuery :: Query RFState RFState dumpQuery = ask makeAcidic ''RFState [ 'cookieJarQuery , 'cookieJarUpdate , 'dumpQuery ]