1
1
/// Deserialization module.
2
- pub use crate :: error:: { Error , ErrorCode , Position } ;
2
+ pub use crate :: error:: { Error , Position , SpannedError } ;
3
3
4
4
use serde:: de:: { self , DeserializeSeed , Deserializer as SerdeError , Visitor } ;
5
5
use std:: { borrow:: Cow , io, str} ;
6
6
7
7
use self :: { id:: IdDeserializer , tag:: TagDeserializer } ;
8
8
use crate :: {
9
+ error:: { Result , SpannedResult } ,
9
10
extensions:: Extensions ,
10
11
options:: Options ,
11
12
parse:: { AnyNum , Bytes , ParsedStr } ,
@@ -17,8 +18,6 @@ mod tag;
17
18
mod tests;
18
19
mod value;
19
20
20
- type Result < T > = std:: result:: Result < T , ErrorCode > ;
21
-
22
21
/// The RON deserializer.
23
22
///
24
23
/// If you just want to simply deserialize a value,
@@ -31,25 +30,19 @@ pub struct Deserializer<'de> {
31
30
impl < ' de > Deserializer < ' de > {
32
31
// Cannot implement trait here since output is tied to input lifetime 'de.
33
32
#[ allow( clippy:: should_implement_trait) ]
34
- pub fn from_str ( input : & ' de str ) -> std :: result :: Result < Self , Error > {
33
+ pub fn from_str ( input : & ' de str ) -> SpannedResult < Self > {
35
34
Self :: from_str_with_options ( input, Options :: default ( ) )
36
35
}
37
36
38
- pub fn from_bytes ( input : & ' de [ u8 ] ) -> std :: result :: Result < Self , Error > {
37
+ pub fn from_bytes ( input : & ' de [ u8 ] ) -> SpannedResult < Self > {
39
38
Self :: from_bytes_with_options ( input, Options :: default ( ) )
40
39
}
41
40
42
- pub fn from_str_with_options (
43
- input : & ' de str ,
44
- options : Options ,
45
- ) -> std:: result:: Result < Self , Error > {
41
+ pub fn from_str_with_options ( input : & ' de str , options : Options ) -> SpannedResult < Self > {
46
42
Self :: from_bytes_with_options ( input. as_bytes ( ) , options)
47
43
}
48
44
49
- pub fn from_bytes_with_options (
50
- input : & ' de [ u8 ] ,
51
- options : Options ,
52
- ) -> std:: result:: Result < Self , Error > {
45
+ pub fn from_bytes_with_options ( input : & ' de [ u8 ] , options : Options ) -> SpannedResult < Self > {
53
46
let mut deserializer = Deserializer {
54
47
bytes : Bytes :: new ( input) ?,
55
48
newtype_variant : false ,
@@ -64,14 +57,14 @@ impl<'de> Deserializer<'de> {
64
57
String :: from_utf8_lossy ( self . bytes . bytes ( ) )
65
58
}
66
59
67
- pub fn error ( & self , code : ErrorCode ) -> Error {
68
- self . bytes . error ( code)
60
+ pub fn span_error ( & self , code : Error ) -> SpannedError {
61
+ self . bytes . span_error ( code)
69
62
}
70
63
}
71
64
72
65
/// A convenience function for building a deserializer
73
66
/// and deserializing a value of type `T` from a reader.
74
- pub fn from_reader < R , T > ( rdr : R ) -> std :: result :: Result < T , Error >
67
+ pub fn from_reader < R , T > ( rdr : R ) -> SpannedResult < T >
75
68
where
76
69
R : io:: Read ,
77
70
T : de:: DeserializeOwned ,
81
74
82
75
/// A convenience function for building a deserializer
83
76
/// and deserializing a value of type `T` from a string.
84
- pub fn from_str < ' a , T > ( s : & ' a str ) -> std :: result :: Result < T , Error >
77
+ pub fn from_str < ' a , T > ( s : & ' a str ) -> SpannedResult < T >
85
78
where
86
79
T : de:: Deserialize < ' a > ,
87
80
{
90
83
91
84
/// A convenience function for building a deserializer
92
85
/// and deserializing a value of type `T` from bytes.
93
- pub fn from_bytes < ' a , T > ( s : & ' a [ u8 ] ) -> std :: result :: Result < T , Error >
86
+ pub fn from_bytes < ' a , T > ( s : & ' a [ u8 ] ) -> SpannedResult < T >
94
87
where
95
88
T : de:: Deserialize < ' a > ,
96
89
{
@@ -106,7 +99,7 @@ impl<'de> Deserializer<'de> {
106
99
if self . bytes . bytes ( ) . is_empty ( ) {
107
100
Ok ( ( ) )
108
101
} else {
109
- Err ( ErrorCode :: TrailingCharacters )
102
+ Err ( Error :: TrailingCharacters )
110
103
}
111
104
}
112
105
@@ -139,7 +132,7 @@ impl<'de> Deserializer<'de> {
139
132
}
140
133
141
134
impl < ' de , ' a > de:: Deserializer < ' de > for & ' a mut Deserializer < ' de > {
142
- type Error = ErrorCode ;
135
+ type Error = Error ;
143
136
144
137
fn deserialize_any < V > ( self , visitor : V ) -> Result < V :: Value >
145
138
where
@@ -203,7 +196,7 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
203
196
b'.' => self . deserialize_f64 ( visitor) ,
204
197
b'"' | b'r' => self . deserialize_string ( visitor) ,
205
198
b'\'' => self . deserialize_char ( visitor) ,
206
- other => Err ( ErrorCode :: UnexpectedByte ( other as char ) ) ,
199
+ other => Err ( Error :: UnexpectedByte ( other as char ) ) ,
207
200
}
208
201
}
209
202
@@ -346,7 +339,7 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
346
339
347
340
match res {
348
341
Ok ( byte_buf) => visitor. visit_byte_buf ( byte_buf) ,
349
- Err ( err) => Err ( ErrorCode :: Base64Error ( err) ) ,
342
+ Err ( err) => Err ( Error :: Base64Error ( err) ) ,
350
343
}
351
344
}
352
345
@@ -371,10 +364,10 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
371
364
if self . bytes . consume ( ")" ) {
372
365
Ok ( v)
373
366
} else {
374
- Err ( ErrorCode :: ExpectedOptionEnd )
367
+ Err ( Error :: ExpectedOptionEnd )
375
368
}
376
369
} else {
377
- Err ( ErrorCode :: ExpectedOption )
370
+ Err ( Error :: ExpectedOption )
378
371
}
379
372
}
380
373
@@ -388,7 +381,7 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
388
381
389
382
visitor. visit_unit ( )
390
383
} else {
391
- Err ( ErrorCode :: ExpectedUnit )
384
+ Err ( Error :: ExpectedUnit )
392
385
}
393
386
}
394
387
@@ -427,12 +420,12 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
427
420
if self . bytes . consume ( ")" ) {
428
421
Ok ( value)
429
422
} else {
430
- Err ( ErrorCode :: ExpectedStructLikeEnd )
423
+ Err ( Error :: ExpectedStructLikeEnd )
431
424
}
432
425
} else if name. is_empty ( ) {
433
- Err ( ErrorCode :: ExpectedStructLike )
426
+ Err ( Error :: ExpectedStructLike )
434
427
} else {
435
- Err ( ErrorCode :: ExpectedNamedStructLike ( name) )
428
+ Err ( Error :: ExpectedNamedStructLike ( name) )
436
429
}
437
430
}
438
431
@@ -449,10 +442,10 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
449
442
if self . bytes . consume ( "]" ) {
450
443
Ok ( value)
451
444
} else {
452
- Err ( ErrorCode :: ExpectedArrayEnd )
445
+ Err ( Error :: ExpectedArrayEnd )
453
446
}
454
447
} else {
455
- Err ( ErrorCode :: ExpectedArray )
448
+ Err ( Error :: ExpectedArray )
456
449
}
457
450
}
458
451
@@ -470,10 +463,10 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
470
463
if old_newtype_variant || self . bytes . consume ( ")" ) {
471
464
Ok ( value)
472
465
} else {
473
- Err ( ErrorCode :: ExpectedStructLikeEnd )
466
+ Err ( Error :: ExpectedStructLikeEnd )
474
467
}
475
468
} else {
476
- Err ( ErrorCode :: ExpectedStructLike )
469
+ Err ( Error :: ExpectedStructLike )
477
470
}
478
471
}
479
472
@@ -491,9 +484,7 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
491
484
}
492
485
493
486
self . deserialize_tuple ( len, visitor) . map_err ( |e| match e {
494
- ErrorCode :: ExpectedStructLike if !name. is_empty ( ) => {
495
- ErrorCode :: ExpectedNamedStructLike ( name)
496
- }
487
+ Error :: ExpectedStructLike if !name. is_empty ( ) => Error :: ExpectedNamedStructLike ( name) ,
497
488
e => e,
498
489
} )
499
490
}
@@ -511,10 +502,10 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
511
502
if self . bytes . consume ( "}" ) {
512
503
Ok ( value)
513
504
} else {
514
- Err ( ErrorCode :: ExpectedMapEnd )
505
+ Err ( Error :: ExpectedMapEnd )
515
506
}
516
507
} else {
517
- Err ( ErrorCode :: ExpectedMap )
508
+ Err ( Error :: ExpectedMap )
518
509
}
519
510
}
520
511
@@ -543,12 +534,12 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
543
534
if old_newtype_variant || self . bytes . consume ( ")" ) {
544
535
Ok ( value)
545
536
} else {
546
- Err ( ErrorCode :: ExpectedStructLikeEnd )
537
+ Err ( Error :: ExpectedStructLikeEnd )
547
538
}
548
539
} else if name. is_empty ( ) {
549
- Err ( ErrorCode :: ExpectedStructLike )
540
+ Err ( Error :: ExpectedStructLike )
550
541
} else {
551
- Err ( ErrorCode :: ExpectedNamedStructLike ( name) )
542
+ Err ( Error :: ExpectedNamedStructLike ( name) )
552
543
}
553
544
}
554
545
@@ -570,7 +561,7 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
570
561
where
571
562
V : Visitor < ' de > ,
572
563
{
573
- visitor. visit_str ( str:: from_utf8 ( self . bytes . identifier ( ) ?) . map_err ( ErrorCode :: from) ?)
564
+ visitor. visit_str ( str:: from_utf8 ( self . bytes . identifier ( ) ?) . map_err ( Error :: from) ?)
574
565
}
575
566
576
567
fn deserialize_ignored_any < V > ( self , visitor : V ) -> Result < V :: Value >
@@ -608,13 +599,13 @@ impl<'a, 'de> CommaSeparated<'a, 'de> {
608
599
// No trailing comma but terminator
609
600
( false , false ) => Ok ( false ) ,
610
601
// No trailing comma or terminator
611
- ( false , true ) => Err ( ErrorCode :: ExpectedComma ) ,
602
+ ( false , true ) => Err ( Error :: ExpectedComma ) ,
612
603
}
613
604
}
614
605
}
615
606
616
607
impl < ' de , ' a > de:: SeqAccess < ' de > for CommaSeparated < ' a , ' de > {
617
- type Error = ErrorCode ;
608
+ type Error = Error ;
618
609
619
610
fn next_element_seed < T > ( & mut self , seed : T ) -> Result < Option < T :: Value > >
620
611
where
@@ -633,7 +624,7 @@ impl<'de, 'a> de::SeqAccess<'de> for CommaSeparated<'a, 'de> {
633
624
}
634
625
635
626
impl < ' de , ' a > de:: MapAccess < ' de > for CommaSeparated < ' a , ' de > {
636
- type Error = ErrorCode ;
627
+ type Error = Error ;
637
628
638
629
fn next_key_seed < K > ( & mut self , seed : K ) -> Result < Option < K :: Value > >
639
630
where
@@ -666,7 +657,7 @@ impl<'de, 'a> de::MapAccess<'de> for CommaSeparated<'a, 'de> {
666
657
667
658
Ok ( res)
668
659
} else {
669
- Err ( ErrorCode :: ExpectedMapColon )
660
+ Err ( Error :: ExpectedMapColon )
670
661
}
671
662
}
672
663
}
@@ -682,7 +673,7 @@ impl<'a, 'de> Enum<'a, 'de> {
682
673
}
683
674
684
675
impl < ' de , ' a > de:: EnumAccess < ' de > for Enum < ' a , ' de > {
685
- type Error = ErrorCode ;
676
+ type Error = Error ;
686
677
type Variant = Self ;
687
678
688
679
fn variant_seed < V > ( self , seed : V ) -> Result < ( V :: Value , Self :: Variant ) >
@@ -698,7 +689,7 @@ impl<'de, 'a> de::EnumAccess<'de> for Enum<'a, 'de> {
698
689
}
699
690
700
691
impl < ' de , ' a > de:: VariantAccess < ' de > for Enum < ' a , ' de > {
701
- type Error = ErrorCode ;
692
+ type Error = Error ;
702
693
703
694
fn unit_variant ( self ) -> Result < ( ) > {
704
695
Ok ( ( ) )
@@ -728,10 +719,10 @@ impl<'de, 'a> de::VariantAccess<'de> for Enum<'a, 'de> {
728
719
if self . de . bytes . consume ( ")" ) {
729
720
Ok ( val)
730
721
} else {
731
- Err ( ErrorCode :: ExpectedStructLikeEnd )
722
+ Err ( Error :: ExpectedStructLikeEnd )
732
723
}
733
724
} else {
734
- Err ( ErrorCode :: ExpectedStructLike )
725
+ Err ( Error :: ExpectedStructLike )
735
726
}
736
727
}
737
728
0 commit comments