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 } ;
@@ -139,7 +134,7 @@ impl Message {
139
134
let mut reader = buf. as_slice ( ) ;
140
135
141
136
// Read original opcode (should be OP_MSG)
142
- let original_opcode = reader. read_i32 ( ) ?;
137
+ let original_opcode = reader. read_i32_sync ( ) ?;
143
138
if original_opcode != OpCode :: Message as i32 {
144
139
return Err ( ErrorKind :: InvalidResponse {
145
140
message : format ! (
@@ -152,10 +147,10 @@ impl Message {
152
147
}
153
148
154
149
// Read uncompressed size
155
- let uncompressed_size = reader. read_i32 ( ) ?;
150
+ let uncompressed_size = reader. read_i32_sync ( ) ?;
156
151
157
152
// Read compressor id
158
- let compressor_id: u8 = reader. read_u8 ( ) ?;
153
+ let compressor_id: u8 = reader. read_u8_sync ( ) ?;
159
154
160
155
// Get decoder
161
156
let decoder = Decoder :: from_u8 ( compressor_id) ?;
@@ -188,7 +183,7 @@ impl Message {
188
183
mut length_remaining : i32 ,
189
184
header : & Header ,
190
185
) -> Result < Self > {
191
- let flags = MessageFlags :: from_bits_truncate ( reader. read_u32 ( ) ?) ;
186
+ let flags = MessageFlags :: from_bits_truncate ( reader. read_u32_sync ( ) ?) ;
192
187
length_remaining -= std:: mem:: size_of :: < u32 > ( ) as i32 ;
193
188
194
189
let mut count_reader = SyncCountReader :: new ( & mut reader) ;
@@ -203,7 +198,7 @@ impl Message {
203
198
let mut checksum = None ;
204
199
205
200
if length_remaining == 4 && flags. contains ( MessageFlags :: CHECKSUM_PRESENT ) {
206
- checksum = Some ( reader. read_u32 ( ) ?) ;
201
+ checksum = Some ( reader. read_u32_sync ( ) ?) ;
207
202
} else if length_remaining != 0 {
208
203
return Err ( ErrorKind :: InvalidResponse {
209
204
message : format ! (
@@ -251,11 +246,11 @@ impl Message {
251
246
} ;
252
247
253
248
header. write_to ( & mut writer) . await ?;
254
- writer. write_u32 ( self . flags . bits ( ) ) . await ?;
249
+ writer. write_u32_le ( self . flags . bits ( ) ) . await ?;
255
250
writer. write_all ( & sections_bytes) . await ?;
256
251
257
252
if let Some ( checksum) = self . checksum {
258
- writer. write_u32 ( checksum) . await ?;
253
+ writer. write_u32_le ( checksum) . await ?;
259
254
}
260
255
261
256
writer. flush ( ) . await ?;
@@ -302,9 +297,9 @@ impl Message {
302
297
// Write header
303
298
header. write_to ( & mut writer) . await ?;
304
299
// Write original (pre-compressed) opcode (always OP_MSG)
305
- writer. write_i32 ( OpCode :: Message as i32 ) . await ?;
300
+ writer. write_i32_le ( OpCode :: Message as i32 ) . await ?;
306
301
// Write uncompressed size
307
- writer. write_i32 ( uncompressed_len as i32 ) . await ?;
302
+ writer. write_i32_le ( uncompressed_len as i32 ) . await ?;
308
303
// Write compressor id
309
304
writer. write_u8 ( compressor_id) . await ?;
310
305
// Write compressed message
@@ -341,15 +336,15 @@ pub(crate) enum MessageSection {
341
336
impl MessageSection {
342
337
/// Reads bytes from `reader` and deserializes them into a MessageSection.
343
338
fn read < R : Read > ( reader : & mut R ) -> Result < Self > {
344
- let payload_type = reader. read_u8 ( ) ?;
339
+ let payload_type = reader. read_u8_sync ( ) ?;
345
340
346
341
if payload_type == 0 {
347
342
return Ok ( MessageSection :: Document ( bson_util:: read_document_bytes (
348
343
reader,
349
344
) ?) ) ;
350
345
}
351
346
352
- let size = reader. read_i32 ( ) ?;
347
+ let size = reader. read_i32_sync ( ) ?;
353
348
let mut length_remaining = size - std:: mem:: size_of :: < i32 > ( ) as i32 ;
354
349
355
350
let mut identifier = String :: new ( ) ;
@@ -397,7 +392,7 @@ impl MessageSection {
397
392
// Write payload type.
398
393
writer. write_u8 ( 1 ) . await ?;
399
394
400
- writer. write_i32 ( * size) . await ?;
395
+ writer. write_i32_le ( * size) . await ?;
401
396
super :: util:: write_cstring ( writer, identifier) . await ?;
402
397
403
398
for doc in documents {
0 commit comments