diff --git a/src/traft/mod.rs b/src/traft/mod.rs index 8dfbd7635ab4c8cb25fff09067aa80112c52d097..18e1da379101c7912a95b0154f4539ccdd9044b4 100644 --- a/src/traft/mod.rs +++ b/src/traft/mod.rs @@ -12,7 +12,7 @@ pub mod topology; use crate::storage; use crate::storage::ClusterwideSpace; use crate::stringify_debug; -use crate::util::{AnyWithTypeName, Uppercase}; +use crate::util::{AnyWithTypeName, Transition, Uppercase}; use ::raft::prelude as raft; use ::tarantool::tlua; use ::tarantool::tlua::LuaError; @@ -495,25 +495,14 @@ impl Instance { impl std::fmt::Display for Instance { #[rustfmt::skip] fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - return write!(f, + write!(f, "({}, {}, {}, {}, {})", self.instance_id, self.raft_id, self.replicaset_id, - GradeTransition { from: self.current_grade, to: self.target_grade }, + Transition { from: self.current_grade, to: self.target_grade }, &self.failure_domain, - ); - - struct GradeTransition { from: CurrentGrade, to: TargetGrade } - impl std::fmt::Display for GradeTransition { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - if self.from == self.to { - write!(f, "{}", self.to) - } else { - write!(f, "{} -> {}", self.from, self.to) - } - } - } + ) } } diff --git a/src/util.rs b/src/util.rs index aadd362831ed5a05820db129986181b3cbb161a6..3f10edfe08441ce5e3b71b64fc790b12a8777ced 100644 --- a/src/util.rs +++ b/src/util.rs @@ -398,6 +398,30 @@ pub fn downcast<T: 'static>(any: Box<dyn AnyWithTypeName>) -> Result<T, Error> { } } +//////////////////////////////////////////////////////////////////////////////// +/// A helper struct for displaying transitions between 2 values. +pub struct Transition<T, U> { + pub from: T, + pub to: U, +} + +impl<T, U> std::fmt::Display for Transition<T, U> +where + T: std::fmt::Display, + U: std::fmt::Display, + T: PartialEq<U>, +{ + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + if self.from == self.to { + write!(f, "{}", self.to) + } else { + write!(f, "{} -> {}", self.from, self.to) + } + } +} + +//////////////////////////////////////////////////////////////////////////////// +/// tests #[cfg(test)] mod tests { #[test]