44//! handle different numeric bases, floating point formats, and error conditions.
55//! Useful for configuration parsing, data validation, and text processing.
66
7- use strs_tools :: * ;
7+ // Note: This example uses standard library parsing methods
88
99fn main ( )
1010{
@@ -42,7 +42,7 @@ fn basic_number_parsing()
4242 print ! ( " '{}' -> " , num_str ) ;
4343
4444 // Try parsing as integer first
45- match string :: number :: parse :: < i32 > ( num_str )
45+ match num_str . parse :: < i32 > ( )
4646 {
4747 Ok ( int_val ) =>
4848 {
@@ -51,7 +51,7 @@ fn basic_number_parsing()
5151 Err ( _ ) =>
5252 {
5353 // If integer parsing fails, try float
54- match string :: number :: parse :: < f64 > ( num_str )
54+ match num_str . parse :: < f64 > ( )
5555 {
5656 Ok ( float_val ) =>
5757 {
@@ -70,17 +70,17 @@ fn basic_number_parsing()
7070 println ! ( "\n Parsing to different numeric types:" ) ;
7171 let test_value = "255" ;
7272
73- if let Ok ( as_u8 ) = string :: number :: parse :: < u8 > ( test_value )
73+ if let Ok ( as_u8 ) = test_value . parse :: < u8 > ( )
7474 {
7575 println ! ( " '{}' as u8: {}" , test_value, as_u8 ) ;
7676 }
7777
78- if let Ok ( as_i16 ) = string :: number :: parse :: < i16 > ( test_value )
78+ if let Ok ( as_i16 ) = test_value . parse :: < i16 > ( )
7979 {
8080 println ! ( " '{}' as i16: {}" , test_value, as_i16 ) ;
8181 }
8282
83- if let Ok ( as_f32 ) = string :: number :: parse :: < f32 > ( test_value )
83+ if let Ok ( as_f32 ) = test_value . parse :: < f32 > ( )
8484 {
8585 println ! ( " '{}' as f32: {}" , test_value, as_f32 ) ;
8686 }
@@ -156,7 +156,7 @@ fn different_number_formats()
156156 }
157157 else
158158 {
159- Err ( std :: num :: ParseIntError :: from ( std :: num :: IntErrorKind :: InvalidDigit ) )
159+ Err ( "invalid digit" . parse :: < i32 > ( ) . unwrap_err ( ) )
160160 } ;
161161
162162 match parsed_value
@@ -165,7 +165,7 @@ fn different_number_formats()
165165 Err ( _ ) =>
166166 {
167167 // Fallback to lexical parsing
168- match string :: number :: parse :: < i64 > ( num_str )
168+ match num_str . parse :: < i64 > ( )
169169 {
170170 Ok ( val ) => println ! ( "{}" , val ) ,
171171 Err ( _ ) => println ! ( "Parse failed" ) ,
@@ -176,13 +176,13 @@ fn different_number_formats()
176176 else
177177 {
178178 // Try floating point for scientific notation and special values
179- match string :: number :: parse :: < f64 > ( num_str )
179+ match num_str . parse :: < f64 > ( )
180180 {
181181 Ok ( float_val ) => println ! ( "{}" , float_val ) ,
182182 Err ( _ ) =>
183183 {
184184 // Fallback to integer
185- match string :: number :: parse :: < i64 > ( num_str )
185+ match num_str . parse :: < i64 > ( )
186186 {
187187 Ok ( int_val ) => println ! ( "{}" , int_val ) ,
188188 Err ( _ ) => println ! ( "Parse failed" ) ,
@@ -225,14 +225,14 @@ fn error_handling_and_validation()
225225 {
226226 print ! ( " '{}' -> " , input. replace( ' ' , "␣" ) ) ; // Show spaces clearly
227227
228- match string :: number :: parse :: < i32 > ( input )
228+ match input . parse :: < i32 > ( )
229229 {
230230 Ok ( val ) => println ! ( "Unexpectedly parsed as: {}" , val ) ,
231231 Err ( _ ) =>
232232 {
233233 // Try with preprocessing (trim whitespace)
234234 let trimmed = input. trim ( ) ;
235- match string :: number :: parse :: < i32 > ( trimmed )
235+ match trimmed . parse :: < i32 > ( )
236236 {
237237 Ok ( val ) => println ! ( "Parsed after trim: {}" , val ) ,
238238 Err ( _ ) =>
@@ -281,23 +281,23 @@ fn error_handling_and_validation()
281281 {
282282 "u8" =>
283283 {
284- match string :: number :: parse :: < u8 > ( value )
284+ match value . parse :: < u8 > ( )
285285 {
286286 Ok ( val ) => println ! ( "OK: {}" , val ) ,
287287 Err ( _ ) => println ! ( "Range error: value too large for u8" ) ,
288288 }
289289 } ,
290290 "u32" =>
291291 {
292- match string :: number :: parse :: < u32 > ( value )
292+ match value . parse :: < u32 > ( )
293293 {
294294 Ok ( val ) => println ! ( "OK: {}" , val ) ,
295295 Err ( _ ) => println ! ( "Range error: negative value for u32" ) ,
296296 }
297297 } ,
298298 "i16" =>
299299 {
300- match string :: number :: parse :: < i16 > ( value )
300+ match value . parse :: < i16 > ( )
301301 {
302302 Ok ( val ) => println ! ( "OK: {}" , val ) ,
303303 Err ( _ ) => println ! ( "Range error: value too large for i16" ) ,
@@ -335,34 +335,35 @@ fn real_world_scenarios()
335335
336336 for entry in config_entries
337337 {
338- if let Some ( key ) = string:: isolate:: isolate_left ( entry, "=" )
338+ // Parse key=value pairs using standard string operations
339+ if let Some ( equals_pos ) = entry. find ( '=' )
339340 {
340- if let Some ( value_str ) = string:: isolate:: isolate_right ( entry, "=" )
341+ let ( key, rest ) = entry. split_at ( equals_pos ) ;
342+ let value_str = & rest[ 1 .. ] ; // Skip the '=' character
343+ print ! ( " {}: '{}' -> " , key, value_str ) ;
344+
345+ // Different parsing strategies based on config key
346+ match key
341347 {
342- print ! ( " {}: '{}' -> " , key, value_str ) ;
343-
344- // Different parsing strategies based on config key
345- match key
346- {
347348 k if k. contains ( "port" ) || k. contains ( "connections" ) || k. contains ( "size" ) =>
348349 {
349- match string :: number :: parse :: < u32 > ( value_str )
350+ match value_str . parse :: < u32 > ( )
350351 {
351352 Ok ( val ) => println ! ( "u32: {}" , val ) ,
352353 Err ( _ ) => println ! ( "Invalid integer" ) ,
353354 }
354355 } ,
355356 k if k. contains ( "timeout" ) || k. contains ( "delay" ) =>
356357 {
357- match string :: number :: parse :: < f64 > ( value_str )
358+ match value_str . parse :: < f64 > ( )
358359 {
359360 Ok ( val ) => println ! ( "f64: {} seconds" , val ) ,
360361 Err ( _ ) => println ! ( "Invalid float" ) ,
361362 }
362363 } ,
363364 k if k. contains ( "enable" ) =>
364365 {
365- match string :: number :: parse :: < i32 > ( value_str )
366+ match value_str . parse :: < i32 > ( )
366367 {
367368 Ok ( 1 ) => println ! ( "boolean: true" ) ,
368369 Ok ( 0 ) => println ! ( "boolean: false" ) ,
@@ -372,13 +373,12 @@ fn real_world_scenarios()
372373 } ,
373374 _ =>
374375 {
375- match string :: number :: parse :: < f64 > ( value_str )
376+ match value_str . parse :: < f64 > ( )
376377 {
377378 Ok ( val ) => println ! ( "f64: {}" , val ) ,
378379 Err ( _ ) => println ! ( "Not a number" ) ,
379380 }
380381 }
381- }
382382 }
383383 }
384384 }
@@ -421,8 +421,8 @@ fn real_world_scenarios()
421421
422422 if let Some ( op ) = found_operator
423423 {
424- match ( string :: number :: parse :: < f64 > ( left_operand ) ,
425- string :: number :: parse :: < f64 > ( right_operand ) )
424+ match ( left_operand . parse :: < f64 > ( ) ,
425+ right_operand . parse :: < f64 > ( ) )
426426 {
427427 ( Ok ( left ) , Ok ( right ) ) =>
428428 {
@@ -484,7 +484,7 @@ fn real_world_scenarios()
484484
485485 let unit_part = measurement[ numeric_part. len ( ) .. ] . trim ( ) ;
486486
487- match string :: number :: parse :: < f64 > ( & numeric_part )
487+ match numeric_part . parse :: < f64 > ( )
488488 {
489489 Ok ( value ) =>
490490 {
0 commit comments