@@ -240,19 +240,30 @@ pub enum StringKind {
240
240
Unicode ,
241
241
}
242
242
243
- impl TryFrom < String > for StringKind {
243
+ impl TryFrom < char > for StringKind {
244
244
type Error = String ;
245
245
246
- fn try_from ( value : String ) -> Result < Self , String > {
247
- match value. as_str ( ) {
248
- "" => Ok ( StringKind :: String ) ,
249
- "r" | "R" => Ok ( StringKind :: RawString ) ,
250
- "u" | "U" => Ok ( StringKind :: Unicode ) ,
251
- "b" | "B" => Ok ( StringKind :: Bytes ) ,
252
- "f" | "F" => Ok ( StringKind :: FString ) ,
253
- "fr" | "Fr" | "fR" | "FR" | "rf" | "rF" | "Rf" | "RF" => Ok ( StringKind :: RawFString ) ,
254
- "br" | "Br" | "bR" | "BR" | "rb" | "rB" | "Rb" | "RB" => Ok ( StringKind :: RawBytes ) ,
255
- s => Err ( format ! ( "Unexpected string prefix: {s}" ) ) ,
246
+ fn try_from ( ch : char ) -> Result < Self , String > {
247
+ match ch {
248
+ 'r' | 'R' => Ok ( StringKind :: RawString ) ,
249
+ 'f' | 'F' => Ok ( StringKind :: FString ) ,
250
+ 'u' | 'U' => Ok ( StringKind :: Unicode ) ,
251
+ 'b' | 'B' => Ok ( StringKind :: Bytes ) ,
252
+ c => Err ( format ! ( "Unexpected string prefix: {c}" ) ) ,
253
+ }
254
+ }
255
+ }
256
+
257
+ impl TryFrom < [ char ; 2 ] > for StringKind {
258
+ type Error = String ;
259
+
260
+ fn try_from ( chars : [ char ; 2 ] ) -> Result < Self , String > {
261
+ match chars {
262
+ [ 'r' | 'R' , 'f' | 'F' ] => Ok ( StringKind :: RawFString ) ,
263
+ [ 'f' | 'F' , 'r' | 'R' ] => Ok ( StringKind :: RawFString ) ,
264
+ [ 'r' | 'R' , 'b' | 'B' ] => Ok ( StringKind :: RawBytes ) ,
265
+ [ 'b' | 'B' , 'r' | 'R' ] => Ok ( StringKind :: RawBytes ) ,
266
+ [ c1, c2] => Err ( format ! ( "Unexpected string prefix: {c1}{c2}" ) ) ,
256
267
}
257
268
}
258
269
}
@@ -291,4 +302,13 @@ impl StringKind {
291
302
pub fn is_unicode ( & self ) -> bool {
292
303
matches ! ( self , StringKind :: Unicode )
293
304
}
305
+
306
+ pub fn prefix_len ( & self ) -> usize {
307
+ use StringKind :: * ;
308
+ match self {
309
+ String => 0 ,
310
+ RawString | FString | Unicode | Bytes => 1 ,
311
+ RawFString | RawBytes => 2 ,
312
+ }
313
+ }
294
314
}
0 commit comments