10
10
11
11
use nom:: {
12
12
branch:: alt, bytes:: complete:: tag, map, sequence:: preceded, take_until, terminated,
13
- Err :: Incomplete , IResult , Needed ,
13
+ Err :: Incomplete , IResult ,
14
14
} ;
15
15
16
+ use crate :: keyword:: Keyword ;
16
17
use crate :: maps:: MapEntry ;
17
18
use crate :: persistent_list:: ToPersistentList ;
18
19
use crate :: persistent_list_map:: ToPersistentListMap ;
19
20
use crate :: persistent_vector:: ToPersistentVector ;
20
21
use crate :: symbol:: Symbol ;
21
- use crate :: keyword:: Keyword ;
22
22
use crate :: value:: { ToValue , Value } ;
23
23
use std:: rc:: Rc ;
24
24
25
25
use std:: io:: BufRead ;
26
- use nom:: Err :: Error ;
27
- use nom:: error:: ErrorKind ;
28
26
//
29
27
// Note; the difference between ours 'parsers'
30
28
// identifier_parser
@@ -78,7 +76,7 @@ fn cons_str(head: char, tail: &str) -> String {
78
76
////////////////////////////////////////////////////////////////////////////////////////////////////
79
77
80
78
////////////////////////////////////////////////////////////////////////////////////////////////////
81
- //
79
+ //
82
80
// Predicates
83
81
//
84
82
////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -150,12 +148,12 @@ fn is_clojure_whitespace(c: char) -> bool {
150
148
c. is_whitespace ( ) || c == ','
151
149
}
152
150
////////////////////////////////////////////////////////////////////////////////////////////////////
153
- // End predicates
151
+ // End predicates
154
152
////////////////////////////////////////////////////////////////////////////////////////////////////
155
153
156
154
///////////////////////////////////////////////////////////////////////////////////////////////////////
157
- //
158
- // Parsers
155
+ //
156
+ // Parsers
159
157
//
160
158
//////////////////////////////////////////////////////////////////////////////////////////////////////
161
159
@@ -290,32 +288,31 @@ pub fn try_read_i32(input: &str) -> IResult<&str, Value> {
290
288
/// false => Value::Boolean(false)
291
289
pub fn try_read_bool ( input : & str ) -> IResult < & str , Value > {
292
290
named ! ( bool_parser<& str , & str >, alt!( tag!( "true" ) | tag!( "false" ) ) ) ;
293
- let ( rest_input, bool) = bool_parser ( input) ?;
291
+ let ( rest_input, bool) = bool_parser ( input) ?;
294
292
Ok ( ( rest_input, Value :: Boolean ( bool. parse ( ) . unwrap ( ) ) ) )
295
293
}
296
294
297
-
298
295
/// Tries to parse &str into Value::double
299
296
///
300
297
pub fn try_read_f64 ( input : & str ) -> IResult < & str , Value > {
301
298
to_value_parser ( double_parser) ( input)
302
299
}
303
300
304
301
// Perhaps generalize this into reader macros
305
- /// Tries to parse &str into Value::Keyword
302
+ /// Tries to parse &str into Value::Keyword
306
303
/// Example Successes:
307
304
/// :a => Value::Keyword(Keyword { sym: Symbol { name: "a" })
308
- /// :cat-dog => Value::Keyword(Keyword { sym: Symbol { name: "cat-dog" })
305
+ /// :cat-dog => Value::Keyword(Keyword { sym: Symbol { name: "cat-dog" })
309
306
/// Example Failures:
310
- /// :12 :'a
307
+ /// :12 :'a
311
308
pub fn try_read_keyword ( input : & str ) -> IResult < & str , Value > {
312
309
named ! ( keyword_colon<& str , & str >, preceded!( consume_clojure_whitespaces_parser, tag!( ":" ) ) ) ;
313
310
314
311
let ( rest_input, _) = keyword_colon ( input) ?;
315
- let ( rest_input, symbol) = symbol_parser ( rest_input) ?;
312
+ let ( rest_input, symbol) = symbol_parser ( rest_input) ?;
316
313
317
314
let keyword_value = Keyword { sym : symbol } . to_value ( ) ;
318
- Ok ( ( rest_input, keyword_value) )
315
+ Ok ( ( rest_input, keyword_value) )
319
316
}
320
317
321
318
/// Tries to parse &str into Value::Symbol
@@ -421,28 +418,34 @@ pub fn try_read_list(input: &str) -> IResult<&str, Value> {
421
418
pub fn try_read_quoted ( input : & str ) -> IResult < & str , Value > {
422
419
named ! ( quote<& str , & str >, preceded!( consume_clojure_whitespaces_parser, tag!( "'" ) ) ) ;
423
420
424
- let ( form, _) = quote ( input) ?;
421
+ let ( form, _) = quote ( input) ?;
425
422
426
- let ( rest_input, quoted_form_value) = try_read ( form) ?;
423
+ let ( rest_input, quoted_form_value) = try_read ( form) ?;
427
424
428
- // (quote value)
429
- Ok ( ( rest_input,
430
- vec ! [ Symbol :: intern( "quote" ) . to_rc_value( ) ,
431
- quoted_form_value . to_rc_value( ) ] . into_list ( ) . to_value ( ) ) )
425
+ // (quote value)
426
+ Ok ( (
427
+ rest_input,
428
+ vec ! [
429
+ Symbol :: intern( "quote" ) . to_rc_value( ) ,
430
+ quoted_form_value. to_rc_value( ) ,
431
+ ]
432
+ . into_list ( )
433
+ . to_value ( ) ,
434
+ ) )
432
435
}
433
436
434
437
pub fn try_read ( input : & str ) -> IResult < & str , Value > {
435
438
preceded (
436
439
consume_clojure_whitespaces_parser,
437
440
alt ( (
438
- try_read_quoted,
441
+ try_read_quoted,
439
442
try_read_map,
440
443
try_read_string,
441
444
try_read_f64,
442
445
try_read_i32,
443
446
try_read_bool,
444
447
try_read_symbol,
445
- try_read_keyword,
448
+ try_read_keyword,
446
449
try_read_list,
447
450
try_read_vector,
448
451
) ) ,
@@ -454,7 +457,7 @@ pub fn try_read(input: &str) -> IResult<&str, Value> {
454
457
455
458
////////////////////////////////////////////////////////////////////////////////////////////////////
456
459
//
457
- // Readers
460
+ // Readers
458
461
//
459
462
///////////////////////////////////////////////////////////////////////////////////////////////////
460
463
@@ -471,7 +474,9 @@ pub fn read<R: BufRead>(reader: &mut R) -> Value {
471
474
match maybe_line {
472
475
Some ( Err ( e) ) => return Value :: Condition ( format ! ( "Reader error: {}" , e) ) ,
473
476
Some ( Ok ( line) ) => input_buffer. push_str ( & line) ,
474
- None => return Value :: Condition ( String :: from ( "Tried to read empty stream; unexpected EOF" ) ) ,
477
+ None => {
478
+ return Value :: Condition ( String :: from ( "Tried to read empty stream; unexpected EOF" ) )
479
+ }
475
480
}
476
481
477
482
let line_read = try_read ( & input_buffer) ;
@@ -594,7 +599,7 @@ mod tests {
594
599
}
595
600
596
601
mod integer_parser_tests {
597
- use crate :: reader:: { integer_parser} ;
602
+ use crate :: reader:: integer_parser;
598
603
599
604
#[ test]
600
605
fn integer_parser_parses_integer_one ( ) {
@@ -623,8 +628,8 @@ mod tests {
623
628
}
624
629
625
630
mod try_read_bool_tests {
626
- use crate :: value:: Value ;
627
631
use crate :: reader:: try_read_bool;
632
+ use crate :: value:: Value ;
628
633
629
634
#[ test]
630
635
fn try_read_boolean_true_test ( ) {
@@ -633,7 +638,10 @@ mod tests {
633
638
634
639
#[ test]
635
640
fn try_read_boolean_false_test ( ) {
636
- assert_eq ! ( Value :: Boolean ( false ) , try_read_bool( "false " ) . ok( ) . unwrap( ) . 1 ) ;
641
+ assert_eq ! (
642
+ Value :: Boolean ( false ) ,
643
+ try_read_bool( "false " ) . ok( ) . unwrap( ) . 1
644
+ ) ;
637
645
}
638
646
}
639
647
@@ -654,15 +662,13 @@ mod tests {
654
662
}
655
663
656
664
mod try_read_tests {
657
- use crate :: maps:: MapEntry ;
658
665
use crate :: persistent_list;
659
666
use crate :: persistent_list_map;
660
667
use crate :: persistent_vector;
661
668
use crate :: reader:: try_read;
662
669
use crate :: symbol:: Symbol ;
663
670
use crate :: value:: Value ;
664
671
use crate :: value:: Value :: { PersistentList , PersistentListMap , PersistentVector } ;
665
- use std:: rc:: Rc ;
666
672
667
673
#[ test]
668
674
fn try_read_empty_map_test ( ) {
@@ -743,18 +749,12 @@ mod tests {
743
749
744
750
#[ test]
745
751
fn try_read_bool_true_test ( ) {
746
- assert_eq ! (
747
- Value :: Boolean ( true ) ,
748
- try_read( "true " ) . ok( ) . unwrap( ) . 1
749
- )
752
+ assert_eq ! ( Value :: Boolean ( true ) , try_read( "true " ) . ok( ) . unwrap( ) . 1 )
750
753
}
751
754
752
755
#[ test]
753
756
fn try_read_bool_false_test ( ) {
754
- assert_eq ! (
755
- Value :: Boolean ( false ) ,
756
- try_read( "false " ) . ok( ) . unwrap( ) . 1
757
- )
757
+ assert_eq ! ( Value :: Boolean ( false ) , try_read( "false " ) . ok( ) . unwrap( ) . 1 )
758
758
}
759
759
}
760
760
@@ -776,7 +776,10 @@ mod tests {
776
776
#[ test]
777
777
fn consume_whitespaces_from_input_no_whitespace ( ) {
778
778
let s = "1, 2, 3" ;
779
- assert_eq ! ( Some ( ( "1, 2, 3" , ( ) ) ) , consume_clojure_whitespaces_parser( & s) . ok( ) ) ;
779
+ assert_eq ! (
780
+ Some ( ( "1, 2, 3" , ( ) ) ) ,
781
+ consume_clojure_whitespaces_parser( & s) . ok( )
782
+ ) ;
780
783
}
781
784
}
782
785
0 commit comments