Skip to content

Commit b093db6

Browse files
authored
Remove usage of Cursor (#186)
* Add intellij files to .gitignore * Remove Cursor usage when deserializing * Don't use methods that copy into another temp buffer
1 parent 8c3e3df commit b093db6

File tree

2 files changed

+10
-8
lines changed

2 files changed

+10
-8
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,5 @@ Cargo.lock
33
.cargo
44
*.swp
55
*.bk
6+
tarpc.iml
7+
.idea

src/protocol.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
// This file may not be copied, modified, or distributed except according to those terms.
55

66
use bincode;
7-
use byteorder::{BigEndian, ReadBytesExt};
7+
use byteorder::{BigEndian, ByteOrder};
88
use bytes::BytesMut;
99
use bytes::buf::BufMut;
1010
use serde;
11-
use std::io::{self, Cursor};
11+
use std::io;
1212
use std::marker::PhantomData;
1313
use std::mem;
1414
use tokio_io::{AsyncRead, AsyncWrite};
@@ -34,7 +34,7 @@ enum CodecState {
3434
impl<Encode, Decode> Codec<Encode, Decode> {
3535
fn new(max_payload_size: u64) -> Self {
3636
Codec {
37-
max_payload_size: max_payload_size,
37+
max_payload_size,
3838
state: CodecState::Id,
3939
_phantom_data: PhantomData,
4040
}
@@ -105,9 +105,9 @@ where
105105
}
106106
Id => {
107107
let mut id_buf = buf.split_to(mem::size_of::<u64>());
108-
let id = Cursor::new(&mut id_buf).read_u64::<BigEndian>()?;
108+
let id = BigEndian::read_u64(&*id_buf);
109109
trace!("--> Parsed id = {} from {:?}", id, id_buf);
110-
self.state = Len { id: id };
110+
self.state = Len { id };
111111
}
112112
Len { .. } if buf.len() < mem::size_of::<u64>() => {
113113
trace!(
@@ -118,7 +118,7 @@ where
118118
}
119119
Len { id } => {
120120
let len_buf = buf.split_to(mem::size_of::<u64>());
121-
let len = Cursor::new(len_buf).read_u64::<BigEndian>()?;
121+
let len = BigEndian::read_u64(&*len_buf);
122122
trace!(
123123
"--> Parsed payload length = {}, remaining buffer length = {}",
124124
len,
@@ -127,7 +127,7 @@ where
127127
if len > self.max_payload_size {
128128
return Err(too_big(len, self.max_payload_size));
129129
}
130-
self.state = Payload { id: id, len: len };
130+
self.state = Payload { id, len };
131131
}
132132
Payload { len, .. } if buf.len() < len as usize => {
133133
trace!(
@@ -139,7 +139,7 @@ where
139139
}
140140
Payload { id, len } => {
141141
let payload = buf.split_to(len as usize);
142-
let result = bincode::deserialize_from(&mut Cursor::new(payload));
142+
let result = bincode::deserialize(&payload);
143143
// Reset the state machine because, either way, we're done processing this
144144
// message.
145145
self.state = Id;

0 commit comments

Comments
 (0)