{-# 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.ClusterState (ClusterPowerState)
import Network.Legion.Distribution (Peer)
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,
Binary e,
Binary o,
Binary s,
Default s,
Eq e,
Show e,
Show o,
Show s
)
data Persistence e o s = Persistence {
saveCluster :: Peer -> ClusterPowerState -> IO (),
getState :: PartitionKey -> IO (Maybe (PartitionPowerState e o s)),
saveState :: PartitionKey -> Maybe (PartitionPowerState e o s) -> IO (),
list :: Source IO (PartitionKey, PartitionPowerState e o s)
}