@@ -22,9 +22,11 @@ pub fn extract_metric_aggs(aggs: &Value) -> Option<Vec<MetricAggregation>> {
2222 let body_obj = agg_body. as_object ( ) ?;
2323 let mut found = None ;
2424 for ( key, inner) in body_obj {
25- if let Some ( agg_type) = MetricAggType :: from_str ( key) {
25+ if let Some ( agg_type) = MetricAggType :: from_json_str ( key) {
2626 let field = inner. get ( "field" ) ?. as_str ( ) ?. to_owned ( ) ;
27- let kwargs_map = inner. as_object ( ) ?. iter ( )
27+ let kwargs_map = inner
28+ . as_object ( ) ?
29+ . iter ( )
2830 . filter ( |( k, _) | * k != "field" )
2931 . map ( |( k, v) | ( k. clone ( ) , v. clone ( ) ) )
3032 . collect ( ) ;
@@ -165,7 +167,9 @@ pub fn extract_label_filters(query: &Value) -> Option<(Vec<LabelFilter>, Option<
165167/// - `{"range": ...}` -> `(label_filters=[], time_range=Some(...))`
166168/// - `{"bool": {"filter": ...}}` -> label filters + optional time range
167169/// - `None`/`null` query is represented by caller as `(vec![], None)`.
168- pub fn extract_predicates_from_query ( query : & Value ) -> Option < ( Vec < LabelFilter > , Option < TimeRange > ) > {
170+ pub fn extract_predicates_from_query (
171+ query : & Value ,
172+ ) -> Option < ( Vec < LabelFilter > , Option < TimeRange > ) > {
169173 if query. is_null ( ) {
170174 return Some ( ( Vec :: new ( ) , None ) ) ;
171175 }
@@ -211,9 +215,7 @@ pub fn extract_predicates_from_query(query: &Value) -> Option<(Vec<LabelFilter>,
211215/// }
212216/// }
213217/// ```
214- pub fn extract_group_by_agg (
215- aggs : & Value ,
216- ) -> Option < ( String , GroupBySpec , Vec < MetricAggregation > ) > {
218+ pub fn extract_group_by_agg ( aggs : & Value ) -> Option < ( String , GroupBySpec , Vec < MetricAggregation > ) > {
217219 let obj = aggs. as_object ( ) ?;
218220 // There must be exactly one top-level aggregation entry.
219221 if obj. len ( ) != 1 {
@@ -262,15 +264,27 @@ mod tests {
262264 } ) ;
263265 let result = extract_metric_aggs ( & aggs) . unwrap ( ) ;
264266 assert_eq ! ( result. len( ) , 3 ) ;
265- let avg = result. iter ( ) . find ( |a| a. result_name == "avg_latency" ) . unwrap ( ) ;
267+ let avg = result
268+ . iter ( )
269+ . find ( |a| a. result_name == "avg_latency" )
270+ . unwrap ( ) ;
266271 assert_eq ! ( avg. agg_type, MetricAggType :: Avg ) ;
267272 assert_eq ! ( avg. field, "latency_ms" ) ;
268- let p95 = result. iter ( ) . find ( |a| a. result_name == "p95_latency" ) . unwrap ( ) ;
273+ let p95 = result
274+ . iter ( )
275+ . find ( |a| a. result_name == "p95_latency" )
276+ . unwrap ( ) ;
269277 assert_eq ! ( p95. agg_type, MetricAggType :: Percentiles ) ;
270278 assert_eq ! ( p95. field, "latency_ms" ) ;
271- assert_eq ! ( p95. params. as_ref( ) . unwrap( ) . get( "percents" ) . unwrap( ) , & json!( [ 95 ] ) ) ;
279+ assert_eq ! (
280+ p95. params. as_ref( ) . unwrap( ) . get( "percents" ) . unwrap( ) ,
281+ & json!( [ 95 ] )
282+ ) ;
272283
273- let avg = result. iter ( ) . find ( |a| a. result_name == "avg_latency" ) . unwrap ( ) ;
284+ let avg = result
285+ . iter ( )
286+ . find ( |a| a. result_name == "avg_latency" )
287+ . unwrap ( ) ;
274288 assert ! ( avg. params. is_none( ) ) ;
275289 }
276290
@@ -374,7 +388,12 @@ mod tests {
374388 } ) ;
375389 let ( name, group_by, metric_aggs) = extract_group_by_agg ( & aggs) . unwrap ( ) ;
376390 assert_eq ! ( name, "by_service" ) ;
377- assert_eq ! ( group_by, GroupBySpec :: Terms { field: "service" . to_string( ) } ) ;
391+ assert_eq ! (
392+ group_by,
393+ GroupBySpec :: Terms {
394+ field: "service" . to_string( )
395+ }
396+ ) ;
378397 assert_eq ! ( metric_aggs. len( ) , 1 ) ;
379398 assert_eq ! ( metric_aggs[ 0 ] . agg_type, MetricAggType :: Avg ) ;
380399 }
0 commit comments