Skip to content

Commit 626bb04

Browse files
committed
feat: add to_type() method to RaftLogId for type conversion
Adds a generic conversion method that allows converting any `RaftLogId` implementation to another type that also implements `RaftLogId`. Changes: - Add `to_type<T>()` default method to `RaftLogId` trait - Add tests for bidirectional conversion between `LogId` and tuple types
1 parent a86e6e7 commit 626bb04

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

openraft/src/log_id/mod.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ where C: RaftTypeConfig<LeaderId = crate::vote::leader_id_std::LeaderId<C>>
142142
#[cfg(test)]
143143
mod tests {
144144
use crate::declare_raft_types;
145+
use crate::log_id::raft_log_id::RaftLogId;
145146
use crate::vote::leader_id_std::CommittedLeaderId;
146147

147148
declare_raft_types!(pub TestConfig: LeaderId=crate::vote::leader_id_std::LeaderId<Self>, Term=u64);
@@ -160,4 +161,19 @@ mod tests {
160161
assert_eq!(log_id1.index(), log_id2.index());
161162
assert_eq!(**log_id1.committed_leader_id(), **log_id2.committed_leader_id());
162163
}
164+
165+
#[test]
166+
fn test_to_type_log_id_to_tuple() {
167+
let log_id = super::LogId::<TestConfig>::new_term_index(5, 100);
168+
let tuple: (u64, u64) = log_id.to_type();
169+
assert_eq!((5, 100), tuple);
170+
}
171+
172+
#[test]
173+
fn test_to_type_tuple_to_log_id() {
174+
let tuple: (u64, u64) = (5, 100);
175+
let log_id: super::LogId<TestConfig> = tuple.to_type();
176+
assert_eq!(100, log_id.index());
177+
assert_eq!(5, **log_id.committed_leader_id());
178+
}
163179
}

openraft/src/log_id/raft_log_id.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ where
2626

2727
/// Returns the index of the log id.
2828
fn index(&self) -> u64;
29+
30+
/// Converts this log ID into another type that implements [`RaftLogId`].
31+
fn to_type<T>(&self) -> T
32+
where T: RaftLogId<C> {
33+
T::new(self.committed_leader_id().clone(), self.index())
34+
}
2935
}
3036

3137
impl<C, T> RaftLogId<C> for &T

0 commit comments

Comments
 (0)