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