33use std:: fmt;
44use std:: fmt:: Formatter ;
55
6- use super :: Batch ;
6+ use super :: RaftBatch ;
7+ use crate :: OptionalSend ;
78
8- impl < T : fmt:: Display > Batch < T > {
9- /// Returns a display helper that shows all elements.
10- pub fn display ( & self ) -> impl fmt:: Display + ' _ {
11- BatchDisplay {
12- elements : self ,
13- max : None ,
14- }
15- }
9+ /// Display helper for types implementing `RaftBatch`.
10+ pub struct DisplayBatch < ' a , T , B >
11+ where
12+ T : fmt:: Display + OptionalSend + ' static + fmt:: Debug ,
13+ B : RaftBatch < T > ,
14+ {
15+ pub ( super ) elements : & ' a B ,
16+ pub ( super ) max : Option < usize > ,
17+ pub ( super ) _phantom : std:: marker:: PhantomData < T > ,
18+ }
1619
17- /// Returns a display helper that shows at most `max` elements.
18- pub fn display_n ( & self , max : usize ) -> impl fmt:: Display + ' _ {
19- BatchDisplay {
20- elements : self ,
21- max : Some ( max) ,
20+ impl < ' a , T , B > DisplayBatch < ' a , T , B >
21+ where
22+ T : fmt:: Display + OptionalSend + ' static + fmt:: Debug ,
23+ B : RaftBatch < T > ,
24+ {
25+ pub ( super ) fn new ( elements : & ' a B , max : Option < usize > ) -> Self {
26+ Self {
27+ elements,
28+ max,
29+ _phantom : std:: marker:: PhantomData ,
2230 }
2331 }
2432}
2533
26- struct BatchDisplay < ' a , T > {
27- elements : & ' a Batch < T > ,
28- max : Option < usize > ,
29- }
30-
31- impl < ' a , T : fmt:: Display > fmt:: Display for BatchDisplay < ' a , T > {
34+ impl < ' a , T , B > fmt:: Display for DisplayBatch < ' a , T , B >
35+ where
36+ T : fmt:: Display + OptionalSend + ' static + fmt:: Debug ,
37+ B : RaftBatch < T > ,
38+ {
3239 fn fmt ( & self , f : & mut Formatter < ' _ > ) -> fmt:: Result {
33- let slice = self . elements . as_slice ( ) ;
34- let max = self . max . unwrap_or ( slice. len ( ) ) ;
35- let len = slice. len ( ) ;
40+ let len = self . elements . len ( ) ;
41+ let max = self . max . unwrap_or ( len) ;
3642 let shown = max. min ( len) ;
3743
3844 write ! ( f, "[" ) ?;
39- for ( i, e) in slice . iter ( ) . take ( max) . enumerate ( ) {
45+ for ( i, e) in self . elements . iter ( ) . take ( max) . enumerate ( ) {
4046 if i > 0 {
4147 write ! ( f, ", " ) ?;
4248 }
@@ -55,25 +61,53 @@ impl<'a, T: fmt::Display> fmt::Display for BatchDisplay<'a, T> {
5561#[ cfg( test) ]
5662mod tests {
5763 use super :: * ;
64+ use crate :: impls:: Batch ;
5865
5966 #[ test]
6067 fn test_display ( ) {
61- assert_eq ! ( format!( "{}" , Batch :: Single ( 42 ) . display( ) ) , "[42]" ) ;
62- assert_eq ! ( format!( "{}" , Batch :: Vec ( vec![ 1 , 2 ] ) . display( ) ) , "[1, 2]" ) ;
63- assert_eq ! ( format!( "{}" , Batch :: <i32 >:: Vec ( vec![ ] ) . display( ) ) , "[]" ) ;
68+ assert_eq ! (
69+ format!( "{}" , <Batch <i32 > as RaftBatch <i32 >>:: display( & Batch :: Single ( 42 ) ) ) ,
70+ "[42]"
71+ ) ;
72+ assert_eq ! (
73+ format!( "{}" , <Batch <i32 > as RaftBatch <i32 >>:: display( & Batch :: Vec ( vec![ 1 , 2 ] ) ) ) ,
74+ "[1, 2]"
75+ ) ;
76+ assert_eq ! (
77+ format!(
78+ "{}" ,
79+ <Batch <i32 > as RaftBatch <i32 >>:: display( & Batch :: <i32 >:: Vec ( vec![ ] ) )
80+ ) ,
81+ "[]"
82+ ) ;
6483 }
6584
6685 #[ test]
6786 fn test_display_n ( ) {
6887 let v: Batch < i32 > = [ 1 , 2 , 3 , 4 , 5 ] . into ( ) ;
6988
70- assert_eq ! ( format!( "{}" , v. display_n( 3 ) ) , "[1, 2, 3, ... 2 more]" ) ;
71- assert_eq ! ( format!( "{}" , v. display_n( 5 ) ) , "[1, 2, 3, 4, 5]" ) ;
72- assert_eq ! ( format!( "{}" , v. display_n( 10 ) ) , "[1, 2, 3, 4, 5]" ) ;
73- assert_eq ! ( format!( "{}" , v. display_n( 0 ) ) , "[... 5 more]" ) ;
89+ assert_eq ! (
90+ format!( "{}" , <Batch <i32 > as RaftBatch <i32 >>:: display_n( & v, 3 ) ) ,
91+ "[1, 2, 3, ... 2 more]"
92+ ) ;
93+ assert_eq ! (
94+ format!( "{}" , <Batch <i32 > as RaftBatch <i32 >>:: display_n( & v, 5 ) ) ,
95+ "[1, 2, 3, 4, 5]"
96+ ) ;
97+ assert_eq ! (
98+ format!( "{}" , <Batch <i32 > as RaftBatch <i32 >>:: display_n( & v, 10 ) ) ,
99+ "[1, 2, 3, 4, 5]"
100+ ) ;
101+ assert_eq ! (
102+ format!( "{}" , <Batch <i32 > as RaftBatch <i32 >>:: display_n( & v, 0 ) ) ,
103+ "[... 5 more]"
104+ ) ;
74105
75106 let v2: Batch < i32 > = 42 . into ( ) ;
76- assert_eq ! ( format!( "{}" , v2. display_n( 0 ) ) , "[... 1 more]" ) ;
77- assert_eq ! ( format!( "{}" , v2. display_n( 1 ) ) , "[42]" ) ;
107+ assert_eq ! (
108+ format!( "{}" , <Batch <i32 > as RaftBatch <i32 >>:: display_n( & v2, 0 ) ) ,
109+ "[... 1 more]"
110+ ) ;
111+ assert_eq ! ( format!( "{}" , <Batch <i32 > as RaftBatch <i32 >>:: display_n( & v2, 1 ) ) , "[42]" ) ;
78112 }
79113}
0 commit comments