@@ -40,9 +40,9 @@ impl FilterOperations {
4040
4141#[ derive( Debug ) ]
4242enum MetadataFilterResult {
43- U64Filter ( MetadataFilter < u64 > ) ,
44- StringFilter ( MetadataFilter < String > ) ,
45- StringVecFilter ( MetadataFilter < Vec < String > > ) ,
43+ U64 ( MetadataFilter < u64 > ) ,
44+ String ( MetadataFilter < String > ) ,
45+ StringVec ( MetadataFilter < Vec < String > > ) ,
4646}
4747
4848/// Metadata filter
@@ -83,14 +83,14 @@ impl<T> MetadataFilter<T> {
8383 let p_value = & u_v[ & key] ;
8484 if p_value. is_string ( ) {
8585 let value: String = p_value. as_str ( ) . unwrap_or_default ( ) . to_string ( ) ;
86- return Ok ( MetadataFilterResult :: StringFilter ( MetadataFilter {
86+ return Ok ( MetadataFilterResult :: String ( MetadataFilter {
8787 key,
8888 filter : FilterOperations :: Noop ,
8989 value,
9090 } ) ) ;
9191 } else {
9292 let value: u64 = p_value. as_u64 ( ) . unwrap_or_default ( ) ;
93- return Ok ( MetadataFilterResult :: U64Filter ( MetadataFilter {
93+ return Ok ( MetadataFilterResult :: U64 ( MetadataFilter {
9494 key,
9595 filter : FilterOperations :: Noop ,
9696 value,
@@ -107,31 +107,30 @@ impl<T> MetadataFilter<T> {
107107 } ;
108108 let filter: FilterOperations = FilterOperations :: get_enum ( & op) ;
109109
110- if filter == FilterOperations :: In {
111- if let Some ( arr) = value. as_array ( ) {
110+ if filter == FilterOperations :: In
111+ && let Some ( arr) = value. as_array ( ) {
112112 let str_vec: Vec < String > = arr
113113 . iter ( )
114114 . filter_map ( |v| v. as_str ( ) . map ( String :: from) )
115115 . collect ( ) ;
116- return Ok ( MetadataFilterResult :: StringVecFilter ( MetadataFilter {
116+ return Ok ( MetadataFilterResult :: StringVec ( MetadataFilter {
117117 key,
118118 filter,
119119 value : str_vec,
120120 } ) ) ;
121121 }
122- }
123122
124123 if value. is_string ( ) {
125124 let value = value. as_str ( ) . unwrap_or_default ( ) . to_string ( ) ;
126- return Ok ( MetadataFilterResult :: StringFilter ( MetadataFilter {
125+ return Ok ( MetadataFilterResult :: String ( MetadataFilter {
127126 key,
128127 filter,
129128 value,
130129 } ) ) ;
131130 }
132131 if value. is_number ( ) {
133132 let value = value. as_u64 ( ) . unwrap_or_default ( ) ;
134- return Ok ( MetadataFilterResult :: U64Filter ( MetadataFilter {
133+ return Ok ( MetadataFilterResult :: U64 ( MetadataFilter {
135134 key,
136135 filter,
137136 value,
@@ -154,29 +153,25 @@ fn process_filter(raw_f: &str, raw_m: &str) -> Result<bool, Md2fsError> {
154153
155154 // 3. Match on the filter type and perform the check.
156155 match filter_result {
157- MetadataFilterResult :: StringVecFilter ( f_vec) => {
158- if let Some ( meta_val) = meta_obj. get ( & f_vec. key ) {
159- if let Some ( m_str) = meta_val. as_str ( ) {
160- if f_vec. filter == FilterOperations :: In {
156+ MetadataFilterResult :: StringVec ( f_vec) => {
157+ if let Some ( meta_val) = meta_obj. get ( & f_vec. key )
158+ && let Some ( m_str) = meta_val. as_str ( )
159+ && f_vec. filter == FilterOperations :: In {
161160 return Ok ( f_vec. value . contains ( & m_str. to_string ( ) ) ) ;
162161 }
163- }
164- }
165162 Ok ( false )
166163 }
167- MetadataFilterResult :: StringFilter ( f_str) => {
168- if let Some ( meta_val) = meta_obj. get ( & f_str. key ) {
169- if let Some ( m_str) = meta_val. as_str ( ) {
170- if f_str. filter == FilterOperations :: EqualTo || f_str. filter == FilterOperations :: Noop {
164+ MetadataFilterResult :: String ( f_str) => {
165+ if let Some ( meta_val) = meta_obj. get ( & f_str. key )
166+ && let Some ( m_str) = meta_val. as_str ( )
167+ && ( f_str. filter == FilterOperations :: EqualTo || f_str. filter == FilterOperations :: Noop ) {
171168 return Ok ( f_str. value == m_str) ;
172169 }
173- }
174- }
175170 Ok ( false )
176171 }
177- MetadataFilterResult :: U64Filter ( f_u64) => {
178- if let Some ( meta_val) = meta_obj. get ( & f_u64. key ) {
179- if let Some ( m_u64) = meta_val. as_u64 ( ) {
172+ MetadataFilterResult :: U64 ( f_u64) => {
173+ if let Some ( meta_val) = meta_obj. get ( & f_u64. key )
174+ && let Some ( m_u64) = meta_val. as_u64 ( ) {
180175 return Ok ( match f_u64. filter {
181176 FilterOperations :: EqualTo | FilterOperations :: Noop => m_u64 == f_u64. value ,
182177 FilterOperations :: GreaterThan => m_u64 > f_u64. value ,
@@ -186,7 +181,6 @@ fn process_filter(raw_f: &str, raw_m: &str) -> Result<bool, Md2fsError> {
186181 _ => false ,
187182 } ) ;
188183 }
189- }
190184 Ok ( false )
191185 }
192186 }
0 commit comments