@@ -126,9 +126,9 @@ pub enum RawError {
126
126
UnexpectedType ,
127
127
128
128
/// A BSON value did not fit the proper format.
129
- MalformedValue ( String ) ,
129
+ MalformedValue { message : String } ,
130
130
131
- /// Improper UTF-8 bytes were found when proper UTF-7 was expected. The error value contains
131
+ /// Improper UTF-8 bytes were found when proper UTF-8 was expected. The error value contains
132
132
/// the malformed data as bytes.
133
133
Utf8EncodingError ( Vec < u8 > ) ,
134
134
}
@@ -137,7 +137,7 @@ impl std::fmt::Display for RawError {
137
137
fn fmt ( & self , f : & mut std:: fmt:: Formatter ) -> std:: fmt:: Result {
138
138
match self {
139
139
Self :: UnexpectedType => write ! ( f, "unexpected type" ) ,
140
- Self :: MalformedValue ( s ) => write ! ( f, "malformed value: {:?}" , s ) ,
140
+ Self :: MalformedValue { message } => write ! ( f, "malformed value: {:?}" , message ) ,
141
141
Self :: Utf8EncodingError ( _) => write ! ( f, "utf-8 encoding error" ) ,
142
142
}
143
143
}
@@ -205,19 +205,23 @@ impl RawDocument {
205
205
/// ```
206
206
pub fn new ( data : Vec < u8 > ) -> RawResult < RawDocument > {
207
207
if data. len ( ) < 5 {
208
- return Err ( RawError :: MalformedValue ( "document too short" . into ( ) ) ) ;
208
+ return Err ( RawError :: MalformedValue {
209
+ message : "document too short" . into ( ) ,
210
+ } ) ;
209
211
}
210
212
211
213
let length = i32_from_slice ( & data[ ..4 ] ) ;
212
214
213
215
if data. len ( ) as i32 != length {
214
- return Err ( RawError :: MalformedValue ( "document length incorrect" . into ( ) ) ) ;
216
+ return Err ( RawError :: MalformedValue {
217
+ message : "document length incorrect" . into ( ) ,
218
+ } ) ;
215
219
}
216
220
217
221
if data[ data. len ( ) - 1 ] != 0 {
218
- return Err ( RawError :: MalformedValue (
219
- "document not null-terminated" . into ( ) ,
220
- ) ) ;
222
+ return Err ( RawError :: MalformedValue {
223
+ message : "document not null-terminated" . into ( ) ,
224
+ } ) ;
221
225
}
222
226
223
227
Ok ( Self {
@@ -389,19 +393,23 @@ impl RawDocumentRef {
389
393
let data = data. as_ref ( ) ;
390
394
391
395
if data. len ( ) < 5 {
392
- return Err ( RawError :: MalformedValue ( "document too short" . into ( ) ) ) ;
396
+ return Err ( RawError :: MalformedValue {
397
+ message : "document too short" . into ( ) ,
398
+ } ) ;
393
399
}
394
400
395
401
let length = i32_from_slice ( & data[ ..4 ] ) ;
396
402
397
403
if data. len ( ) as i32 != length {
398
- return Err ( RawError :: MalformedValue ( "document length incorrect" . into ( ) ) ) ;
404
+ return Err ( RawError :: MalformedValue {
405
+ message : "document length incorrect" . into ( ) ,
406
+ } ) ;
399
407
}
400
408
401
409
if data[ data. len ( ) - 1 ] != 0 {
402
- return Err ( RawError :: MalformedValue (
403
- "document not null-terminated" . into ( ) ,
404
- ) ) ;
410
+ return Err ( RawError :: MalformedValue {
411
+ message : "document not null-terminated" . into ( ) ,
412
+ } ) ;
405
413
}
406
414
407
415
Ok ( RawDocumentRef :: new_unchecked ( data) )
@@ -803,9 +811,9 @@ impl<'a> Iterator for RawDocumentIter<'a> {
803
811
// end of document marker
804
812
return None ;
805
813
} else {
806
- return Some ( Err ( RawError :: MalformedValue (
807
- "document not null terminated" . into ( ) ,
808
- ) ) ) ;
814
+ return Some ( Err ( RawError :: MalformedValue {
815
+ message : "document not null terminated" . into ( ) ,
816
+ } ) ) ;
809
817
}
810
818
}
811
819
@@ -819,10 +827,9 @@ impl<'a> Iterator for RawDocumentIter<'a> {
819
827
let element_type = match ElementType :: from ( self . doc . data [ self . offset ] ) {
820
828
Some ( et) => et,
821
829
None => {
822
- return Some ( Err ( RawError :: MalformedValue ( format ! (
823
- "invalid tag: {}" ,
824
- self . doc. data[ self . offset]
825
- ) ) ) )
830
+ return Some ( Err ( RawError :: MalformedValue {
831
+ message : format ! ( "invalid tag: {}" , self . doc. data[ self . offset] ) ,
832
+ } ) )
826
833
}
827
834
} ;
828
835
@@ -833,9 +840,9 @@ impl<'a> Iterator for RawDocumentIter<'a> {
833
840
4 + i32_from_slice ( & self . doc . data [ valueoffset..valueoffset + 4 ] ) as usize ;
834
841
835
842
if self . doc . data [ valueoffset + size - 1 ] != 0 {
836
- return Some ( Err ( RawError :: MalformedValue (
837
- "string not null terminated" . into ( ) ,
838
- ) ) ) ;
843
+ return Some ( Err ( RawError :: MalformedValue {
844
+ message : "string not null terminated" . into ( ) ,
845
+ } ) ) ;
839
846
}
840
847
841
848
size
@@ -844,9 +851,9 @@ impl<'a> Iterator for RawDocumentIter<'a> {
844
851
let size = i32_from_slice ( & self . doc . data [ valueoffset..valueoffset + 4 ] ) as usize ;
845
852
846
853
if self . doc . data [ valueoffset + size - 1 ] != 0 {
847
- return Some ( Err ( RawError :: MalformedValue (
848
- "document not null terminated" . into ( ) ,
849
- ) ) ) ;
854
+ return Some ( Err ( RawError :: MalformedValue {
855
+ message : "document not null terminated" . into ( ) ,
856
+ } ) ) ;
850
857
}
851
858
852
859
size
@@ -855,9 +862,9 @@ impl<'a> Iterator for RawDocumentIter<'a> {
855
862
let size = i32_from_slice ( & self . doc . data [ valueoffset..valueoffset + 4 ] ) as usize ;
856
863
857
864
if self . doc . data [ valueoffset + size - 1 ] != 0 {
858
- return Some ( Err ( RawError :: MalformedValue (
859
- "array not null terminated" . into ( ) ,
860
- ) ) ) ;
865
+ return Some ( Err ( RawError :: MalformedValue {
866
+ message : "array not null terminated" . into ( ) ,
867
+ } ) ) ;
861
868
}
862
869
863
870
size
@@ -891,9 +898,9 @@ impl<'a> Iterator for RawDocumentIter<'a> {
891
898
let id_size = 12 ;
892
899
893
900
if self . doc . data [ valueoffset + string_size - 1 ] != 0 {
894
- return Some ( Err ( RawError :: MalformedValue (
895
- "DBPointer string not null-terminated" . into ( ) ,
896
- ) ) ) ;
901
+ return Some ( Err ( RawError :: MalformedValue {
902
+ message : "DBPointer string not null-terminated" . into ( ) ,
903
+ } ) ) ;
897
904
}
898
905
899
906
string_size + id_size
@@ -903,9 +910,9 @@ impl<'a> Iterator for RawDocumentIter<'a> {
903
910
4 + i32_from_slice ( & self . doc . data [ valueoffset..valueoffset + 4 ] ) as usize ;
904
911
905
912
if self . doc . data [ valueoffset + size - 1 ] != 0 {
906
- return Some ( Err ( RawError :: MalformedValue (
907
- "javascript code not null-terminated" . into ( ) ,
908
- ) ) ) ;
913
+ return Some ( Err ( RawError :: MalformedValue {
914
+ message : "javascript code not null-terminated" . into ( ) ,
915
+ } ) ) ;
909
916
}
910
917
911
918
size
@@ -917,9 +924,9 @@ impl<'a> Iterator for RawDocumentIter<'a> {
917
924
let size = i32_from_slice ( & self . doc . data [ valueoffset..valueoffset + 4 ] ) as usize ;
918
925
919
926
if self . doc . data [ valueoffset + size - 1 ] != 0 {
920
- return Some ( Err ( RawError :: MalformedValue (
921
- "javascript with scope not null-terminated" . into ( ) ,
922
- ) ) ) ;
927
+ return Some ( Err ( RawError :: MalformedValue {
928
+ message : "javascript with scope not null-terminated" . into ( ) ,
929
+ } ) ) ;
923
930
}
924
931
925
932
size
@@ -1135,13 +1142,15 @@ fn d128_from_slice(val: &[u8]) -> Decimal128 {
1135
1142
1136
1143
fn read_nullterminated ( buf : & [ u8 ] ) -> RawResult < & str > {
1137
1144
let mut splits = buf. splitn ( 2 , |x| * x == 0 ) ;
1138
- let value = splits
1139
- . next ( )
1140
- . ok_or_else ( || RawError :: MalformedValue ( "no value" . into ( ) ) ) ?;
1145
+ let value = splits. next ( ) . ok_or_else ( || RawError :: MalformedValue {
1146
+ message : "no value" . into ( ) ,
1147
+ } ) ?;
1141
1148
if splits. next ( ) . is_some ( ) {
1142
1149
Ok ( try_to_str ( value) ?)
1143
1150
} else {
1144
- Err ( RawError :: MalformedValue ( "expected null terminator" . into ( ) ) )
1151
+ Err ( RawError :: MalformedValue {
1152
+ message : "expected null terminator" . into ( ) ,
1153
+ } )
1145
1154
}
1146
1155
}
1147
1156
0 commit comments