@@ -559,33 +559,32 @@ public static string DetermineRegion(string url)
559
559
/// </returns>
560
560
public static string DetermineService ( string url )
561
561
{
562
- int delimIndex = url . IndexOf ( "//" , StringComparison . Ordinal ) ;
563
- if ( delimIndex >= 0 )
564
- url = url . Substring ( delimIndex + 2 ) ;
562
+ var urlSpan = url . AsSpan ( ) ;
565
563
566
- string [ ] urlParts = url . Split ( new char [ ] { '.' } , StringSplitOptions . RemoveEmptyEntries ) ;
567
- if ( urlParts == null || urlParts . Length = = 0 )
568
- return string . Empty ;
564
+ var doubleSlashIndex = urlSpan . IndexOf ( DoubleSlash , StringComparison . Ordinal ) ;
565
+ if ( doubleSlashIndex > = 0 )
566
+ urlSpan = urlSpan . Slice ( doubleSlashIndex + 2 ) ;
569
567
570
- string servicePart = urlParts [ 0 ] ;
571
- int hyphenated = servicePart . IndexOf ( '-' ) ;
572
- string service ;
573
- if ( hyphenated < 0 )
574
- { service = servicePart ; }
575
- else
576
- { service = servicePart . Substring ( 0 , hyphenated ) ; }
568
+ var dotIndex = urlSpan . IndexOf ( '.' ) ;
577
569
578
- // Check for SQS : return "sqs" incase service is determined to be "queue" as per the URL.
579
- if ( service . Equals ( "queue" ) )
580
- {
581
- return "sqs" ;
582
- }
583
- else
570
+ if ( dotIndex < 0 )
571
+ return string . Empty ;
572
+
573
+ var servicePartSpan = urlSpan . Slice ( 0 , dotIndex ) ;
574
+ var hyphenIndex = servicePartSpan . IndexOf ( '-' ) ;
575
+ if ( hyphenIndex > 0 )
584
576
{
585
- return service ;
577
+ servicePartSpan = servicePartSpan . Slice ( 0 , hyphenIndex ) ;
586
578
}
579
+
580
+ // Check for SQS : return "sqs" in case service is determined to be "queue" as per the URL.
581
+ return servicePartSpan . Equals ( Queue , StringComparison . OrdinalIgnoreCase ) ? "sqs" : servicePartSpan . ToString ( ) ;
587
582
}
588
583
584
+ // Compiler trick to directly refer to static data in the assembly
585
+ private static ReadOnlySpan < char > DoubleSlash => new [ ] { '/' , '/' } ;
586
+ private static ReadOnlySpan < char > Queue => new [ ] { 'q' , 'u' , 'e' , 'u' , 'e' } ;
587
+
589
588
/// <summary>
590
589
/// Utility method for converting Unix epoch seconds to DateTime structure.
591
590
/// </summary>
0 commit comments