1
- use std:: collections:: { BTreeMap , BTreeSet } ;
1
+ use std:: {
2
+ borrow:: Cow ,
3
+ collections:: { BTreeMap , BTreeSet } ,
4
+ } ;
2
5
3
6
use anyhow:: Context ;
4
7
use data_iter:: DataIter ;
@@ -16,7 +19,7 @@ pub mod filter;
16
19
#[ serde( default ) ]
17
20
pub struct Data {
18
21
pub selected_row : Option < usize > ,
19
- pub filter : Option < filter :: FilterConfig > ,
22
+ pub filter : Option < FilterConfig > ,
20
23
rows : Vec < LogRow > ,
21
24
filtered_rows : Option < Vec < usize > > ,
22
25
}
@@ -137,6 +140,7 @@ impl Data {
137
140
}
138
141
139
142
pub fn move_selected_to_next ( & mut self ) {
143
+ // TODO 1: Fix index values used
140
144
if let Some ( selected) = self . selected_row . as_mut ( ) {
141
145
if * selected < self . rows . len ( ) - 1 {
142
146
* selected += 1 ;
@@ -216,15 +220,36 @@ fn is_included(
216
220
search_key,
217
221
filter_on,
218
222
comparator,
223
+ is_case_sensitive,
219
224
} = filter;
220
225
let fields_and_values = row. as_slice ( common_fields) ;
226
+ let search_key = if * is_case_sensitive {
227
+ search_key
228
+ } else {
229
+ & search_key. to_lowercase ( )
230
+ } ;
231
+ let mut iter = fields_and_values. iter ( ) . map ( |( k, v) | {
232
+ if * is_case_sensitive {
233
+ ( Cow :: Borrowed ( k) , Cow :: Borrowed ( v) )
234
+ } else {
235
+ ( Cow :: Owned ( k. to_lowercase ( ) ) , Cow :: Owned ( v. to_lowercase ( ) ) )
236
+ }
237
+ } ) ;
238
+
221
239
match filter_on {
222
- filter:: FilterOn :: Any => fields_and_values
223
- . iter ( )
224
- . any ( |( _, value) | comparator. apply ( search_key, value) ) ,
225
- filter:: FilterOn :: Field ( FieldSpecifier { name } ) => fields_and_values
226
- . iter ( )
227
- . any ( |( field_name, value) | name == field_name && comparator. apply ( search_key, value) ) ,
240
+ filter:: FilterOn :: Any => {
241
+ iter. any ( |( _, value) | comparator. apply ( search_key, value. as_str ( ) ) )
242
+ }
243
+ filter:: FilterOn :: Field ( FieldSpecifier { name } ) => {
244
+ let name = if * is_case_sensitive {
245
+ name
246
+ } else {
247
+ & name. to_lowercase ( )
248
+ } ;
249
+ iter. any ( |( field_name, value) | {
250
+ name == field_name. as_str ( ) && comparator. apply ( search_key, value. as_str ( ) )
251
+ } )
252
+ }
228
253
}
229
254
}
230
255
0 commit comments