libraft-0.2.0.0: src/Raft/Event.hs
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE StandaloneDeriving #-}
module Raft.Event where
import Protolude
import qualified Data.Serialize as S
import Raft.Client
import Raft.RPC
import Data.Time.Clock.System
-- | Representation of events a raft node can send and receive
data Event v
= MessageEvent (MessageEvent v)
| TimeoutEvent SystemTime Timeout
deriving (Show)
-- | Representation of timeouts
data Timeout
= ElectionTimeout
-- ^ Timeout after which a follower will become candidate
| HeartbeatTimeout
-- ^ Timeout after which a leader will send AppendEntries RPC to all peers
deriving (Show)
-- | Representation of message events to a node
data MessageEvent v
= RPCMessageEvent (RPCMessage v) -- ^ Incoming event from a peer
| ClientRequestEvent (ClientRequest v) -- ^ Incoming event from a client
deriving (Show, Generic)
instance S.Serialize v => S.Serialize (MessageEvent v)