@@ -401,15 +401,20 @@ enum OrderByValue {
401
401
Child ( String , String ) ,
402
402
}
403
403
404
- fn parse_order_by ( enum_value : & String ) -> OrderByValue {
404
+ fn parse_order_by ( enum_value : & String ) -> Result < OrderByValue , QueryExecutionError > {
405
405
let mut parts = enum_value. split ( "__" ) ;
406
- let first = parts. next ( ) . expect ( "some dark magic happened" ) ;
406
+ let first = parts. next ( ) . ok_or_else ( || {
407
+ QueryExecutionError :: ValueParseError (
408
+ "Invalid order value" . to_string ( ) ,
409
+ enum_value. to_string ( ) ,
410
+ )
411
+ } ) ?;
407
412
let second = parts. next ( ) ;
408
413
409
- match second {
414
+ Ok ( match second {
410
415
Some ( second) => OrderByValue :: Child ( first. to_string ( ) , second. to_string ( ) ) ,
411
416
None => OrderByValue :: Direct ( first. to_string ( ) ) ,
412
- }
417
+ } )
413
418
}
414
419
415
420
struct ObjectOrderDetails {
@@ -436,7 +441,7 @@ fn build_order_by(
436
441
schema : & ApiSchema ,
437
442
) -> Result < Option < ( String , ValueType , Option < OrderByChild > ) > , QueryExecutionError > {
438
443
match field. argument_value ( "orderBy" ) {
439
- Some ( r:: Value :: Enum ( name) ) => match parse_order_by ( name) {
444
+ Some ( r:: Value :: Enum ( name) ) => match parse_order_by ( name) ? {
440
445
OrderByValue :: Direct ( name) => {
441
446
let field = sast:: get_field ( entity, name. as_str ( ) ) . ok_or_else ( || {
442
447
QueryExecutionError :: EntityFieldError ( entity. name ( ) . to_owned ( ) , name. clone ( ) )
0 commit comments