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
13pub trait RaftPayload<NID, N>
15where
16 N: Node,
17 NID: NodeId,
18{
19 fn is_blank(&self) -> bool;
21
22 fn get_membership(&self) -> Option<&Membership<NID, N>>;
24}
25
26pub 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 fn new_blank(log_id: LogId<NID>) -> Self;
37
38 fn new_membership(log_id: LogId<NID>, m: Membership<NID, N>) -> Self;
42}
43
44pub trait FromAppData<T> {
48 fn from_app_data(t: T) -> Self;
50}