{-# LANGUAGE ConstraintKinds #-}
module Network.Legion.Application (
LegionConstraints,
Persistence(..),
) where
import Data.Binary (Binary)
import Data.Conduit (Source)
import Data.Default.Class (Default)
import Network.Legion.Index (Indexable)
import Network.Legion.PartitionKey (PartitionKey)
import Network.Legion.PartitionState (PartitionPowerState)
import Network.Legion.PowerState (Event)
type LegionConstraints e o s = (
Event e o s, Indexable s, Default s, Binary e, Binary o, Binary s,
Show e, Show o, Show s, Eq e
)
data Persistence e o s = Persistence {
getState :: PartitionKey -> IO (Maybe (PartitionPowerState e o s)),
saveState :: PartitionKey -> Maybe (PartitionPowerState e o s) -> IO (),
list :: Source IO (PartitionKey, PartitionPowerState e o s)
}