openraft/entry/
traits.rs

1use std::fmt::Debug;
2use std::fmt::Display;
3
4use crate::log_id::RaftLogId;
5use crate::LogId;
6use crate::Membership;
7use crate::Node;
8use crate::NodeId;
9use crate::OptionalSend;
10use crate::OptionalSerde;
11use crate::OptionalSync;
12
13/// Defines operations on an entry payload.
14pub trait RaftPayload<NID, N>
15where
16    N: Node,
17    NID: NodeId,
18{
19    /// Return `true` if the entry payload is blank.
20    fn is_blank(&self) -> bool;
21
22    /// Return `Some(&Membership)` if the entry payload is a membership payload.
23    fn get_membership(&self) -> Option<&Membership<NID, N>>;
24}
25
26/// Defines operations on an entry.
27pub trait RaftEntry<NID, N>: RaftPayload<NID, N> + RaftLogId<NID>
28where
29    N: Node,
30    NID: NodeId,
31    Self: OptionalSerde + Debug + Display + OptionalSend + OptionalSync,
32{
33    /// Create a new blank log entry.
34    ///
35    /// The returned instance must return `true` for `Self::is_blank()`.
36    fn new_blank(log_id: LogId<NID>) -> Self;
37
38    /// Create a new membership log entry.
39    ///
40    /// The returned instance must return `Some()` for `Self::get_membership()`.
41    fn new_membership(log_id: LogId<NID>, m: Membership<NID, N>) -> Self;
42}
43
44/// Build a raft log entry from app data.
45///
46/// A concrete Entry should implement this trait to let openraft create an entry when needed.
47pub trait FromAppData<T> {
48    /// Build a raft log entry from app data.
49    fn from_app_data(t: T) -> Self;
50}