1
1
use std:: io:: Read ;
2
2
3
3
use bitflags:: bitflags;
4
- use futures_io:: AsyncWrite ;
5
- use futures_util:: {
6
- io:: { BufReader , BufWriter } ,
7
- AsyncReadExt ,
8
- AsyncWriteExt ,
9
- } ;
4
+ use tokio:: io:: { AsyncReadExt , AsyncWrite , AsyncWriteExt , BufReader , BufWriter } ;
10
5
11
6
use super :: header:: { Header , OpCode } ;
12
7
use crate :: {
@@ -16,7 +11,7 @@ use crate::{
16
11
Command ,
17
12
} ,
18
13
error:: { Error , ErrorKind , Result } ,
19
- runtime:: { AsyncLittleEndianWrite , AsyncStream , SyncLittleEndianRead } ,
14
+ runtime:: { AsyncStream , SyncLittleEndianRead } ,
20
15
} ;
21
16
22
17
use crate :: compression:: { Compressor , Decoder } ;
@@ -129,7 +124,7 @@ impl Message {
129
124
let mut reader = buf. as_slice ( ) ;
130
125
131
126
// Read original opcode (should be OP_MSG)
132
- let original_opcode = reader. read_i32 ( ) ?;
127
+ let original_opcode = reader. read_i32_sync ( ) ?;
133
128
if original_opcode != OpCode :: Message as i32 {
134
129
return Err ( ErrorKind :: InvalidResponse {
135
130
message : format ! (
@@ -142,10 +137,10 @@ impl Message {
142
137
}
143
138
144
139
// Read uncompressed size
145
- let uncompressed_size = reader. read_i32 ( ) ?;
140
+ let uncompressed_size = reader. read_i32_sync ( ) ?;
146
141
147
142
// Read compressor id
148
- let compressor_id: u8 = reader. read_u8 ( ) ?;
143
+ let compressor_id: u8 = reader. read_u8_sync ( ) ?;
149
144
150
145
// Get decoder
151
146
let decoder = Decoder :: from_u8 ( compressor_id) ?;
@@ -178,7 +173,7 @@ impl Message {
178
173
mut length_remaining : i32 ,
179
174
header : & Header ,
180
175
) -> Result < Self > {
181
- let flags = MessageFlags :: from_bits_truncate ( reader. read_u32 ( ) ?) ;
176
+ let flags = MessageFlags :: from_bits_truncate ( reader. read_u32_sync ( ) ?) ;
182
177
length_remaining -= std:: mem:: size_of :: < u32 > ( ) as i32 ;
183
178
184
179
let mut count_reader = SyncCountReader :: new ( & mut reader) ;
@@ -193,7 +188,7 @@ impl Message {
193
188
let mut checksum = None ;
194
189
195
190
if length_remaining == 4 && flags. contains ( MessageFlags :: CHECKSUM_PRESENT ) {
196
- checksum = Some ( reader. read_u32 ( ) ?) ;
191
+ checksum = Some ( reader. read_u32_sync ( ) ?) ;
197
192
} else if length_remaining != 0 {
198
193
return Err ( ErrorKind :: InvalidResponse {
199
194
message : format ! (
@@ -241,11 +236,11 @@ impl Message {
241
236
} ;
242
237
243
238
header. write_to ( & mut writer) . await ?;
244
- writer. write_u32 ( self . flags . bits ( ) ) . await ?;
239
+ writer. write_u32_le ( self . flags . bits ( ) ) . await ?;
245
240
writer. write_all ( & sections_bytes) . await ?;
246
241
247
242
if let Some ( checksum) = self . checksum {
248
- writer. write_u32 ( checksum) . await ?;
243
+ writer. write_u32_le ( checksum) . await ?;
249
244
}
250
245
251
246
writer. flush ( ) . await ?;
@@ -292,9 +287,9 @@ impl Message {
292
287
// Write header
293
288
header. write_to ( & mut writer) . await ?;
294
289
// Write original (pre-compressed) opcode (always OP_MSG)
295
- writer. write_i32 ( OpCode :: Message as i32 ) . await ?;
290
+ writer. write_i32_le ( OpCode :: Message as i32 ) . await ?;
296
291
// Write uncompressed size
297
- writer. write_i32 ( uncompressed_len as i32 ) . await ?;
292
+ writer. write_i32_le ( uncompressed_len as i32 ) . await ?;
298
293
// Write compressor id
299
294
writer. write_u8 ( compressor_id) . await ?;
300
295
// Write compressed message
@@ -329,15 +324,15 @@ pub(crate) enum MessageSection {
329
324
impl MessageSection {
330
325
/// Reads bytes from `reader` and deserializes them into a MessageSection.
331
326
fn read < R : Read > ( reader : & mut R ) -> Result < Self > {
332
- let payload_type = reader. read_u8 ( ) ?;
327
+ let payload_type = reader. read_u8_sync ( ) ?;
333
328
334
329
if payload_type == 0 {
335
330
return Ok ( MessageSection :: Document ( bson_util:: read_document_bytes (
336
331
reader,
337
332
) ?) ) ;
338
333
}
339
334
340
- let size = reader. read_i32 ( ) ?;
335
+ let size = reader. read_i32_sync ( ) ?;
341
336
let mut length_remaining = size - std:: mem:: size_of :: < i32 > ( ) as i32 ;
342
337
343
338
let mut identifier = String :: new ( ) ;
@@ -385,7 +380,7 @@ impl MessageSection {
385
380
// Write payload type.
386
381
writer. write_u8 ( 1 ) . await ?;
387
382
388
- writer. write_i32 ( * size) . await ?;
383
+ writer. write_i32_le ( * size) . await ?;
389
384
super :: util:: write_cstring ( writer, identifier) . await ?;
390
385
391
386
for doc in documents {
0 commit comments