{-# 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 (ApplyDelta)
type LegionConstraints i o s = (
ApplyDelta i o s, Indexable s, Default s, Binary i, Binary o, Binary s,
Show i, Show o, Show s, Eq i
)
data Persistence i o s = Persistence {
getState :: PartitionKey -> IO (Maybe (PartitionPowerState i o s)),
saveState :: PartitionKey -> Maybe (PartitionPowerState i o s) -> IO (),
list :: Source IO (PartitionKey, PartitionPowerState i o s)
}