{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE StandaloneDeriving #-}
module Raft.Action where
import Protolude
import Raft.Client
import Raft.RPC
import Raft.Log
import Raft.Event
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 (ClientResponse sm)
| ResetTimeoutTimer Timeout
deriving (Show)
data SendRPCAction v
= SendAppendEntriesRPC (AppendEntriesData v)
| SendAppendEntriesResponseRPC AppendEntriesResponse
| SendRequestVoteRPC RequestVote
| SendRequestVoteResponseRPC RequestVoteResponse
deriving (Show)