Skip to content

Commit 3247313

Browse files
committed
Simplify lifetimes
Since `&'a mut R` is `Read` (or `Write`) when `R` is `Read` (resp. `Write`), there is no need to depend on `<R: ?Sized + Read> &'a mut R` over just plain `<R: Read> R`. The caller can still instantiate `R = &'a mut R_` when a reference is desired (and indeed this is done here for e.g. `MapDeserializer`).
1 parent 2009023 commit 3247313

File tree

2 files changed

+55
-53
lines changed

2 files changed

+55
-53
lines changed

src/de.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -143,19 +143,19 @@ pub struct Deserializer<R> {
143143
max_remaining_depth: usize,
144144
}
145145

146-
impl<'de, R: Read> Deserializer<TeeReader<'de, R>> {
147-
fn from_reader(input: &'de mut R, max_remaining_depth: usize) -> Self {
146+
impl<R: Read> Deserializer<TeeReader<R>> {
147+
fn from_reader(input: R, max_remaining_depth: usize) -> Self {
148148
Deserializer {
149149
input: TeeReader::new(input),
150150
max_remaining_depth,
151151
}
152152
}
153153
}
154154

155-
impl<'de> Deserializer<&'de [u8]> {
155+
impl<R> Deserializer<R> {
156156
/// Creates a new `Deserializer` which will be deserializing the provided
157157
/// input.
158-
pub fn new(input: &'de [u8], max_remaining_depth: usize) -> Self {
158+
pub fn new(input: R, max_remaining_depth: usize) -> Self {
159159
Deserializer {
160160
input,
161161
max_remaining_depth,
@@ -164,24 +164,24 @@ impl<'de> Deserializer<&'de [u8]> {
164164
}
165165

166166
/// A reader that can optionally capture all bytes from an underlying [`Read`]er
167-
struct TeeReader<'de, R> {
167+
struct TeeReader<R> {
168168
/// the underlying reader
169-
reader: &'de mut R,
169+
reader: R,
170170
/// If non-empty, all bytes read from the underlying reader will be captured in the last entry here.
171171
captured_keys: Vec<Vec<u8>>,
172172
}
173173

174-
impl<'de, R> TeeReader<'de, R> {
174+
impl<R> TeeReader<R> {
175175
/// Wraps the provided reader in a new [`TeeReader`].
176-
pub fn new(reader: &'de mut R) -> Self {
176+
pub fn new(reader: R) -> Self {
177177
Self {
178178
reader,
179179
captured_keys: Vec::new(),
180180
}
181181
}
182182
}
183183

184-
impl<'de, R: Read> Read for TeeReader<'de, R> {
184+
impl<R: Read> Read for TeeReader<R> {
185185
fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
186186
let bytes_read = self.reader.read(buf)?;
187187
if let Some(buffer) = self.captured_keys.last_mut() {
@@ -289,7 +289,7 @@ trait BcsDeserializer<'de> {
289289
}
290290
}
291291

292-
impl<'de, R: Read> Deserializer<TeeReader<'de, R>> {
292+
impl<R: Read> Deserializer<TeeReader<R>> {
293293
fn parse_vec(&mut self) -> Result<Vec<u8>> {
294294
let len = self.parse_length()?;
295295
let mut output = vec![0; len];
@@ -303,7 +303,7 @@ impl<'de, R: Read> Deserializer<TeeReader<'de, R>> {
303303
}
304304
}
305305

306-
impl<'de, R: Read> BcsDeserializer<'de> for Deserializer<TeeReader<'de, R>> {
306+
impl<'de, R: Read> BcsDeserializer<'de> for Deserializer<TeeReader<R>> {
307307
type MaybeBorrowedBytes = Vec<u8>;
308308

309309
fn fill_slice(&mut self, slice: &mut [u8]) -> Result<()> {

src/ser.rs

Lines changed: 44 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,8 @@ where
7070
}
7171

7272
/// Same as `to_bytes` but write directly into an `std::io::Write` object.
73-
pub fn serialize_into<W, T>(write: &mut W, value: &T) -> Result<()>
73+
pub fn serialize_into<T>(write: impl std::io::Write, value: &T) -> Result<()>
7474
where
75-
W: ?Sized + std::io::Write,
7675
T: ?Sized + Serialize,
7776
{
7877
let serializer = Serializer::new(write, crate::MAX_CONTAINER_DEPTH);
@@ -81,9 +80,12 @@ where
8180

8281
/// Same as `serialize_into` but use `limit` as max container depth instead of MAX_CONTAINER_DEPTH
8382
/// Note that `limit` has to be lower than MAX_CONTAINER_DEPTH
84-
pub fn serialize_into_with_limit<W, T>(write: &mut W, value: &T, limit: usize) -> Result<()>
83+
pub fn serialize_into_with_limit<T>(
84+
write: impl std::io::Write,
85+
value: &T,
86+
limit: usize,
87+
) -> Result<()>
8588
where
86-
W: ?Sized + std::io::Write,
8789
T: ?Sized + Serialize,
8890
{
8991
if limit > crate::MAX_CONTAINER_DEPTH {
@@ -140,17 +142,17 @@ pub fn is_human_readable() -> bool {
140142
}
141143

142144
/// Serialization implementation for BCS
143-
pub struct Serializer<'a, W: ?Sized> {
144-
output: &'a mut W,
145+
pub struct Serializer<W> {
146+
output: W,
145147
max_remaining_depth: usize,
146148
}
147149

148-
impl<'a, W> Serializer<'a, W>
150+
impl<W> Serializer<W>
149151
where
150-
W: ?Sized + std::io::Write,
152+
W: std::io::Write,
151153
{
152154
/// Creates a new `Serializer` which will emit BCS.
153-
pub fn new(output: &'a mut W, max_remaining_depth: usize) -> Self {
155+
pub fn new(output: W, max_remaining_depth: usize) -> Self {
154156
Self {
155157
output,
156158
max_remaining_depth,
@@ -190,17 +192,17 @@ where
190192
}
191193
}
192194

193-
impl<'a, W> ser::Serializer for Serializer<'a, W>
195+
impl<W> ser::Serializer for Serializer<W>
194196
where
195-
W: ?Sized + std::io::Write,
197+
W: std::io::Write,
196198
{
197199
type Ok = ();
198200
type Error = Error;
199201
type SerializeSeq = Self;
200202
type SerializeTuple = Self;
201203
type SerializeTupleStruct = Self;
202204
type SerializeTupleVariant = Self;
203-
type SerializeMap = MapSerializer<'a, W>;
205+
type SerializeMap = MapSerializer<W>;
204206
type SerializeStruct = Self;
205207
type SerializeStructVariant = Self;
206208

@@ -228,27 +230,27 @@ where
228230
self.serialize_u128(v as u128)
229231
}
230232

231-
fn serialize_u8(self, v: u8) -> Result<()> {
233+
fn serialize_u8(mut self, v: u8) -> Result<()> {
232234
self.output.write_all(&[v])?;
233235
Ok(())
234236
}
235237

236-
fn serialize_u16(self, v: u16) -> Result<()> {
238+
fn serialize_u16(mut self, v: u16) -> Result<()> {
237239
self.output.write_all(&v.to_le_bytes())?;
238240
Ok(())
239241
}
240242

241-
fn serialize_u32(self, v: u32) -> Result<()> {
243+
fn serialize_u32(mut self, v: u32) -> Result<()> {
242244
self.output.write_all(&v.to_le_bytes())?;
243245
Ok(())
244246
}
245247

246-
fn serialize_u64(self, v: u64) -> Result<()> {
248+
fn serialize_u64(mut self, v: u64) -> Result<()> {
247249
self.output.write_all(&v.to_le_bytes())?;
248250
Ok(())
249251
}
250252

251-
fn serialize_u128(self, v: u128) -> Result<()> {
253+
fn serialize_u128(mut self, v: u128) -> Result<()> {
252254
self.output.write_all(&v.to_le_bytes())?;
253255
Ok(())
254256
}
@@ -283,7 +285,7 @@ where
283285
}
284286

285287
// A present optional is represented as `01` followed by the serialized value
286-
fn serialize_some<T>(self, value: &T) -> Result<()>
288+
fn serialize_some<T>(mut self, value: &T) -> Result<()>
287289
where
288290
T: ?Sized + Serialize,
289291
{
@@ -403,9 +405,9 @@ where
403405
}
404406
}
405407

406-
impl<'a, W> ser::SerializeSeq for Serializer<'a, W>
408+
impl<W> ser::SerializeSeq for Serializer<W>
407409
where
408-
W: ?Sized + std::io::Write,
410+
W: std::io::Write,
409411
{
410412
type Ok = ();
411413
type Error = Error;
@@ -414,17 +416,17 @@ where
414416
where
415417
T: ?Sized + Serialize,
416418
{
417-
value.serialize(Serializer::new(self.output, self.max_remaining_depth))
419+
value.serialize(Serializer::new(&mut self.output, self.max_remaining_depth))
418420
}
419421

420422
fn end(self) -> Result<()> {
421423
Ok(())
422424
}
423425
}
424426

425-
impl<'a, W> ser::SerializeTuple for Serializer<'a, W>
427+
impl<W> ser::SerializeTuple for Serializer<W>
426428
where
427-
W: ?Sized + std::io::Write,
429+
W: std::io::Write,
428430
{
429431
type Ok = ();
430432
type Error = Error;
@@ -433,17 +435,17 @@ where
433435
where
434436
T: ?Sized + Serialize,
435437
{
436-
value.serialize(Serializer::new(self.output, self.max_remaining_depth))
438+
value.serialize(Serializer::new(&mut self.output, self.max_remaining_depth))
437439
}
438440

439441
fn end(self) -> Result<()> {
440442
Ok(())
441443
}
442444
}
443445

444-
impl<'a, W> ser::SerializeTupleStruct for Serializer<'a, W>
446+
impl<W> ser::SerializeTupleStruct for Serializer<W>
445447
where
446-
W: ?Sized + std::io::Write,
448+
W: std::io::Write,
447449
{
448450
type Ok = ();
449451
type Error = Error;
@@ -452,17 +454,17 @@ where
452454
where
453455
T: ?Sized + Serialize,
454456
{
455-
value.serialize(Serializer::new(self.output, self.max_remaining_depth))
457+
value.serialize(Serializer::new(&mut self.output, self.max_remaining_depth))
456458
}
457459

458460
fn end(self) -> Result<()> {
459461
Ok(())
460462
}
461463
}
462464

463-
impl<'a, W> ser::SerializeTupleVariant for Serializer<'a, W>
465+
impl<W> ser::SerializeTupleVariant for Serializer<W>
464466
where
465-
W: ?Sized + std::io::Write,
467+
W: std::io::Write,
466468
{
467469
type Ok = ();
468470
type Error = Error;
@@ -471,22 +473,22 @@ where
471473
where
472474
T: ?Sized + Serialize,
473475
{
474-
value.serialize(Serializer::new(self.output, self.max_remaining_depth))
476+
value.serialize(Serializer::new(&mut self.output, self.max_remaining_depth))
475477
}
476478

477479
fn end(self) -> Result<()> {
478480
Ok(())
479481
}
480482
}
481483

482-
pub struct MapSerializer<'a, W: ?Sized> {
483-
serializer: Serializer<'a, W>,
484+
pub struct MapSerializer<W> {
485+
serializer: Serializer<W>,
484486
entries: Vec<(Vec<u8>, Vec<u8>)>,
485487
next_key: Option<Vec<u8>>,
486488
}
487489

488-
impl<'a, W: ?Sized> MapSerializer<'a, W> {
489-
fn new(serializer: Serializer<'a, W>) -> Self {
490+
impl<W> MapSerializer<W> {
491+
fn new(serializer: Serializer<W>) -> Self {
490492
MapSerializer {
491493
serializer,
492494
entries: Vec::new(),
@@ -495,9 +497,9 @@ impl<'a, W: ?Sized> MapSerializer<'a, W> {
495497
}
496498
}
497499

498-
impl<'a, W> ser::SerializeMap for MapSerializer<'a, W>
500+
impl<W> ser::SerializeMap for MapSerializer<W>
499501
where
500-
W: ?Sized + std::io::Write,
502+
W: std::io::Write,
501503
{
502504
type Ok = ();
503505
type Error = Error;
@@ -556,9 +558,9 @@ where
556558
}
557559
}
558560

559-
impl<'a, W> ser::SerializeStruct for Serializer<'a, W>
561+
impl<W> ser::SerializeStruct for Serializer<W>
560562
where
561-
W: ?Sized + std::io::Write,
563+
W: std::io::Write,
562564
{
563565
type Ok = ();
564566
type Error = Error;
@@ -567,17 +569,17 @@ where
567569
where
568570
T: ?Sized + Serialize,
569571
{
570-
value.serialize(Serializer::new(self.output, self.max_remaining_depth))
572+
value.serialize(Serializer::new(&mut self.output, self.max_remaining_depth))
571573
}
572574

573575
fn end(self) -> Result<()> {
574576
Ok(())
575577
}
576578
}
577579

578-
impl<'a, W> ser::SerializeStructVariant for Serializer<'a, W>
580+
impl<W> ser::SerializeStructVariant for Serializer<W>
579581
where
580-
W: ?Sized + std::io::Write,
582+
W: std::io::Write,
581583
{
582584
type Ok = ();
583585
type Error = Error;
@@ -586,7 +588,7 @@ where
586588
where
587589
T: ?Sized + Serialize,
588590
{
589-
value.serialize(Serializer::new(self.output, self.max_remaining_depth))
591+
value.serialize(Serializer::new(&mut self.output, self.max_remaining_depth))
590592
}
591593

592594
fn end(self) -> Result<()> {

0 commit comments

Comments
 (0)