@@ -57,7 +57,7 @@ fn fg_color_increase_mut(color_in: &mut u8) {
5757fn bg_color_increase_mut ( color_in : & mut u8 ) {
5858 let min = 52 ;
5959 let max = 63 ;
60- let mut color = color_in. clone ( ) ;
60+ let mut color = * color_in;
6161 if color < min {
6262 color = min;
6363 } else {
@@ -69,26 +69,38 @@ fn bg_color_increase_mut(color_in: &mut u8) {
6969 * color_in = color;
7070}
7171
72- fn print_recursive ( message : & Message , traces : & ReadTrace , full_message : bool , indent : u32 , bg_color : u8 , fg_color : u8 , min_depth : u32 , max_depth : u32 ) -> Result < ( ) , Box < dyn Error > > {
72+ #[ derive( Clone , Debug ) ]
73+ struct RecursivePrintFlags {
74+ full : bool , // print full message
75+ indent : u32 , // indentation level
76+ min_depth : u32 , // minimum level for printing
77+ max_depth : u32 , // maximum level for printing
78+ fg_color : u8 , // foreground color
79+ bg_color : u8 , // background color
80+ }
81+
82+ fn print_recursive ( message : & Message , traces : & ReadTrace , flags : & mut RecursivePrintFlags ) /* full_message: bool, indent: u32, bg_color: u8, fg_color: u8, min_depth: u32, max_depth: u32)*/ -> Result < ( ) , Box < dyn Error > > {
7383
74- if indent >= max_depth {
84+ if flags . indent >= flags . max_depth {
7585 return Ok ( ( ) ) ;
7686 }
7787
78- if indent >= min_depth {
88+ if flags . indent >= flags . min_depth {
7989 for inner_trace in & traces. read {
80- if inner_trace. read . len ( ) == 0 {
90+ if inner_trace. read . is_empty ( ) {
8191 continue ;
8292 }
83- print_recursive ( message, & inner_trace, full_message, indent + 1 , bg_color, fg_color, min_depth, max_depth) ?;
93+ let mut r_flags = flags. clone ( ) ;
94+ r_flags. indent += 1 ;
95+ print_recursive ( message, inner_trace, & mut r_flags) ?;
8496 }
8597 }
8698
8799 let mut stdout = StandardStream :: stdout ( ColorChoice :: Always ) ;
88100 let trace = traces;
89- let bg_color = bg_color_increase ( bg_color) ;
90- let mut fg_color = fg_color_increase ( fg_color) ;
91- let mut initial_color = fg_color;
101+ let bg_color = bg_color_increase ( flags . bg_color ) ;
102+ let mut fg_color = fg_color_increase ( flags . fg_color ) ;
103+ let mut initial_color = flags . fg_color ;
92104
93105 let types: Vec < ( usize , usize , u8 ) > = trace. read . clone ( ) . into_iter ( )
94106 . map ( |read| {
@@ -102,15 +114,15 @@ fn print_recursive(message: &Message, traces: &ReadTrace,full_message: bool, ind
102114 color_spec. set_bg ( Some ( Color :: Black ) ) ;
103115 stdout. set_color ( & color_spec) ?;
104116
105- let s = format ! ( "{:width$}" , "" , width=indent as usize ) ;
117+ let s = format ! ( "{:width$}" , "" , width=flags . indent as usize ) ;
106118 if trace. annotation . is_some ( ) {
107119 let m = trace. annotation . clone ( ) ;
108120 println ! ( "{}{} {} {} {}" , s, trace. function, m. unwrap( ) , trace. start, trace. stop) ;
109121 } else {
110122 println ! ( "{}{} {} {}" , s, trace. function, trace. start, trace. stop) ;
111123 }
112124
113- let indent = indent +1 ;
125+ let indent = flags . indent +1 ;
114126
115127 for trace in & traces. read {
116128 if trace. readahead {
@@ -131,7 +143,7 @@ fn print_recursive(message: &Message, traces: &ReadTrace,full_message: bool, ind
131143
132144 let ascii_converter = AsciiConverter :: new ( ) ;
133145 let mut ascii_types: Vec < ( u8 , u8 ) > = vec ! [ ] ;
134- if types. len ( ) > 0 {
146+ if ! types. is_empty ( ) {
135147 let mut type_iter = types. iter ( ) ;
136148 let mut current_type = type_iter. next ( ) . unwrap_or ( & ( 0 , 0 , 0 ) ) ;
137149 let mut char_count = 0 ;
@@ -161,10 +173,11 @@ fn print_recursive(message: &Message, traces: &ReadTrace,full_message: bool, ind
161173
162174 let ( _, stop, _) = current_type;
163175 if stop <= & count {
164- let ct = type_iter. next ( ) ;
165- if ct. is_some ( ) {
166- current_type = ct. unwrap ( ) ;
167- }
176+ current_type = if let Some ( current_type) = type_iter. next ( ) {
177+ current_type
178+ } else {
179+ current_type
180+ } ;
168181 }
169182 let ( _, _, color) = current_type;
170183 color_spec. set_fg ( Some ( Color :: Ansi256 ( * color) ) ) ;
@@ -180,7 +193,7 @@ fn print_recursive(message: &Message, traces: &ReadTrace,full_message: bool, ind
180193 write ! ( & mut stdout, "{}" , * chr as char ) ?;
181194 }
182195 ascii_types. clear ( ) ;
183- write ! ( & mut stdout, " \n " ) ?;
196+ writeln ! ( & mut stdout, " " ) ?;
184197 char_count = 0 ;
185198 } else {
186199 char_count +=1 ;
@@ -193,17 +206,29 @@ fn print_recursive(message: &Message, traces: &ReadTrace,full_message: bool, ind
193206 writeln ! ( & mut stdout) ?;
194207
195208 for inner_trace in & trace. read {
196- if inner_trace. read . len ( ) == 0 {
209+ if inner_trace. read . is_empty ( ) {
197210 continue ;
198211 }
199- print_recursive ( message, & inner_trace, full_message, indent + 1 , bg_color, fg_color, min_depth, max_depth) ?;
212+ let mut f = flags. clone ( ) ;
213+ f. indent += 1 ;
214+ f. fg_color = fg_color;
215+ f. bg_color = bg_color;
216+ print_recursive ( message, inner_trace, & mut f) ?;
200217 }
201- return Ok ( ( ) ) ;
218+ Ok ( ( ) )
202219}
203220
204221pub fn print_message_trace ( message : & Message , full_message : bool , min_depth : u32 , max_depth : u32 ) -> Result < ( ) , Box < dyn Error > > {
222+ let flags = RecursivePrintFlags {
223+ full : full_message,
224+ indent : 0 ,
225+ min_depth,
226+ max_depth,
227+ fg_color : 0 ,
228+ bg_color : 0
229+ } ;
205230 for trace in & message. trace . read {
206- print_recursive ( message, & trace, full_message , 0 , 0 , 0 , min_depth , max_depth ) ?;
231+ print_recursive ( message, trace, & mut flags . clone ( ) ) ?;
207232 }
208233 Ok ( ( ) )
209234}
0 commit comments