Skip to content

Commit 2c13f4b

Browse files
Merge pull request #118 from pierwill/primitive-as
fix: Remove `as` conversions in protocol/primitives.rs
2 parents 7dc2e9e + a090364 commit 2c13f4b

File tree

1 file changed

+17
-11
lines changed

1 file changed

+17
-11
lines changed

src/protocol/primitives.rs

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -236,9 +236,9 @@ where
236236
let mut shift = 0;
237237
loop {
238238
reader.read_exact(&mut buf)?;
239-
let c = buf[0];
239+
let c: u64 = buf[0].into();
240240

241-
res |= ((c as u64) & 0x7f) << shift;
241+
res |= (c & 0x7f) << shift;
242242
shift += 7;
243243

244244
if (c & 0x80) == 0 {
@@ -262,7 +262,7 @@ where
262262
fn write(&self, writer: &mut W) -> Result<(), WriteError> {
263263
let mut curr = self.0;
264264
loop {
265-
let mut c = (curr & 0x7f) as u8;
265+
let mut c = u8::try_from(curr & 0x7f).map_err(WriteError::Overflow)?;
266266
curr >>= 7;
267267
if curr > 0 {
268268
c |= 0x80;
@@ -409,7 +409,8 @@ where
409409
W: Write,
410410
{
411411
fn write(&self, writer: &mut W) -> Result<(), WriteError> {
412-
UnsignedVarint(self.0.len() as u64 + 1).write(writer)?;
412+
let len = u64::try_from(self.0.len() + 1).map_err(WriteError::Overflow)?;
413+
UnsignedVarint(len).write(writer)?;
413414
writer.write_all(self.0.as_bytes())?;
414415
Ok(())
415416
}
@@ -465,7 +466,8 @@ where
465466
fn write(&self, writer: &mut W) -> Result<(), WriteError> {
466467
match &self.0 {
467468
Some(s) => {
468-
UnsignedVarint(s.len() as u64 + 1).write(writer)?;
469+
let len = u64::try_from(s.len() + 1).map_err(WriteError::Overflow)?;
470+
UnsignedVarint(len).write(writer)?;
469471
writer.write_all(s.as_bytes())?;
470472
}
471473
None => {
@@ -533,12 +535,14 @@ where
533535
{
534536
fn read(reader: &mut R) -> Result<Self, ReadError> {
535537
let len = UnsignedVarint::read(reader)?;
536-
let mut res = VecBuilder::new(len.0 as usize);
537-
for _ in 0..len.0 {
538+
let len = usize::try_from(len.0).map_err(ReadError::Overflow)?;
539+
let mut res = VecBuilder::new(len);
540+
for _ in 0..len {
538541
let tag = UnsignedVarint::read(reader)?;
539542

540543
let data_len = UnsignedVarint::read(reader)?;
541-
let mut data_builder = VecBuilder::new(data_len.0 as usize);
544+
let data_len = usize::try_from(data_len.0).map_err(ReadError::Overflow)?;
545+
let mut data_builder = VecBuilder::new(data_len);
542546
data_builder = data_builder.read_exact(reader)?;
543547

544548
res.push((tag, data_builder.into()));
@@ -552,11 +556,13 @@ where
552556
W: Write,
553557
{
554558
fn write(&self, writer: &mut W) -> Result<(), WriteError> {
555-
UnsignedVarint(self.0.len() as u64).write(writer)?;
559+
let len = u64::try_from(self.0.len()).map_err(WriteError::Overflow)?;
560+
UnsignedVarint(len).write(writer)?;
556561

557562
for (tag, data) in &self.0 {
558563
tag.write(writer)?;
559-
UnsignedVarint(data.len() as u64).write(writer)?;
564+
let data_len = u64::try_from(data.len()).map_err(WriteError::Overflow)?;
565+
UnsignedVarint(data_len).write(writer)?;
560566
writer.write_all(data)?;
561567
}
562568

@@ -661,7 +667,7 @@ where
661667
{
662668
fn read(reader: &mut R) -> Result<Self, ReadError> {
663669
let buf = NullableBytes::read(reader)?.0.unwrap_or_default();
664-
let len = buf.len() as u64;
670+
let len = u64::try_from(buf.len())?;
665671
let mut buf = Cursor::new(buf);
666672

667673
let mut batches = vec![];

0 commit comments

Comments
 (0)