chore: Update prost codec to not use workaround (#226)
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
use super::{Codec, Decoder, Encoder};
|
use super::{Codec, Decoder, Encoder};
|
||||||
use crate::{Code, Status};
|
use crate::{Code, Status};
|
||||||
use bytes::{Buf, BufMut, BytesMut};
|
use bytes::BytesMut;
|
||||||
use prost::Message;
|
use prost::Message;
|
||||||
use std::marker::PhantomData;
|
use std::marker::PhantomData;
|
||||||
|
|
||||||
@@ -45,19 +45,9 @@ impl<T: Message> Encoder for ProstEncoder<T> {
|
|||||||
type Error = Status;
|
type Error = Status;
|
||||||
|
|
||||||
fn encode(&mut self, item: Self::Item, buf: &mut BytesMut) -> Result<(), Self::Error> {
|
fn encode(&mut self, item: Self::Item, buf: &mut BytesMut) -> Result<(), Self::Error> {
|
||||||
let len = item.encoded_len();
|
item.encode(buf)
|
||||||
|
|
||||||
if buf.remaining_mut() < len {
|
|
||||||
buf.reserve(len);
|
|
||||||
}
|
|
||||||
|
|
||||||
let mut v = Vec::with_capacity(len);
|
|
||||||
|
|
||||||
item.encode(&mut v)
|
|
||||||
.expect("Message only errors if not enough space");
|
.expect("Message only errors if not enough space");
|
||||||
|
|
||||||
buf.extend(v);
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -71,18 +61,10 @@ impl<U: Message + Default> Decoder for ProstDecoder<U> {
|
|||||||
type Error = Status;
|
type Error = Status;
|
||||||
|
|
||||||
fn decode(&mut self, buf: &mut BytesMut) -> Result<Option<Self::Item>, Self::Error> {
|
fn decode(&mut self, buf: &mut BytesMut) -> Result<Option<Self::Item>, Self::Error> {
|
||||||
let mut cursor = std::io::Cursor::new(&buf[..]);
|
let item = Message::decode(buf)
|
||||||
|
|
||||||
let item = Message::decode(&mut cursor)
|
|
||||||
.map(Option::Some)
|
.map(Option::Some)
|
||||||
.map_err(from_decode_error)?;
|
.map_err(from_decode_error)?;
|
||||||
|
|
||||||
let amt = cursor.position() as usize;
|
|
||||||
|
|
||||||
drop(cursor);
|
|
||||||
|
|
||||||
buf.advance(amt);
|
|
||||||
|
|
||||||
Ok(item)
|
Ok(item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user