messages.rs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. use serde_derive::{Deserialize, Serialize};
  2. use crate::log_array::LogEntry;
  3. use crate::raft::{Peer, Term};
  4. use crate::{Index, IndexTerm};
  5. #[derive(Clone, Debug, Serialize, Deserialize)]
  6. pub struct RequestVoteArgs {
  7. pub(crate) term: Term,
  8. pub(crate) candidate_id: Peer,
  9. pub(crate) last_log_index: Index,
  10. pub(crate) last_log_term: Term,
  11. pub(crate) prevote: bool,
  12. }
  13. #[derive(Clone, Debug, Serialize, Deserialize)]
  14. pub struct RequestVoteReply {
  15. pub(crate) term: Term,
  16. pub(crate) vote_granted: bool,
  17. }
  18. #[derive(Clone, Debug, Serialize, Deserialize)]
  19. pub struct AppendEntriesArgs<Command> {
  20. pub(crate) term: Term,
  21. pub(crate) leader_id: Peer,
  22. pub(crate) prev_log_index: Index,
  23. pub(crate) prev_log_term: Term,
  24. pub(crate) entries: Vec<LogEntry<Command>>,
  25. pub(crate) leader_commit: Index,
  26. }
  27. #[derive(Clone, Debug, Serialize, Deserialize)]
  28. pub struct AppendEntriesReply {
  29. pub(crate) term: Term,
  30. pub(crate) success: bool,
  31. pub(crate) committed: Option<IndexTerm>,
  32. }
  33. #[derive(Clone, Debug, Serialize, Deserialize)]
  34. pub struct InstallSnapshotArgs {
  35. pub(crate) term: Term,
  36. pub(crate) leader_id: Peer,
  37. pub(crate) last_included_index: Index,
  38. pub(crate) last_included_term: Term,
  39. // TODO(ditsing): Serde cannot handle Vec<u8> as efficient as expected.
  40. pub(crate) data: Vec<u8>,
  41. pub(crate) offset: usize,
  42. pub(crate) done: bool,
  43. }
  44. #[derive(Clone, Debug, Serialize, Deserialize)]
  45. pub struct InstallSnapshotReply {
  46. pub(crate) term: Term,
  47. pub(crate) committed: Option<IndexTerm>,
  48. }