{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE UndecidableInstances #-}
module Raft.Action where
import Protolude
import Raft.Client
import Raft.RPC
import Raft.Log
import Raft.Event
import Raft.StateMachine
import Raft.Types
data Action sm v
= SendRPC NodeId (SendRPCAction v)
| SendRPCs (Map NodeId (SendRPCAction v))
| BroadcastRPC NodeIds (SendRPCAction v)
| AppendLogEntries (Entries v)
| RespondToClient ClientId (ClientRespSpec sm v)
| ResetTimeoutTimer Timeout
| UpdateClientReqCacheFrom Index
deriving instance (Show sm, Show v, Show (RaftStateMachinePureError sm v)) => Show (Action sm v)
data SendRPCAction v
= SendAppendEntriesRPC (AppendEntriesData v)
| SendAppendEntriesResponseRPC AppendEntriesResponse
| SendRequestVoteRPC RequestVote
| SendRequestVoteResponseRPC RequestVoteResponse
deriving (Show)