module Clckwrks.IrcBot.Acid where
import Clckwrks.IrcBot.Types (IrcConfig(..))
import Control.Applicative ((<$>))
import Control.Monad.Reader (ask)
import Control.Monad.State (modify)
import Data.Acid (Query, Update, makeAcidic)
import Data.Data (Data, Typeable)
import Data.IxSet (IxSet, (@=), getOne, empty, toList, updateIx)
import Data.SafeCopy (base, deriveSafeCopy)
data IrcBotState = IrcBotState
{ ircConfig :: IrcConfig
}
deriving (Eq, Ord, Read, Show, Data, Typeable)
$(deriveSafeCopy 0 'base ''IrcBotState)
initialIrcBotState :: IrcConfig -> IrcBotState
initialIrcBotState initConfig
= IrcBotState
{ ircConfig = initConfig
}
getIrcConfig :: Query IrcBotState IrcConfig
getIrcConfig = ircConfig <$> ask
setIrcConfig :: IrcConfig -> Update IrcBotState ()
setIrcConfig newConfig =
modify $ \s -> s { ircConfig = newConfig }
$(makeAcidic ''IrcBotState
[ 'getIrcConfig
, 'setIrcConfig
]
)