Skip to content

Commit 7251d0c

Browse files
committed
consensus_encoding: rename min_bytes_needed
The `min_bytes_needed` name is a bit of a misnomer because it implies a lower bound instead of an upper. I believe the original intention was to capture "minimum bytes needed to advance the state of the decoder", but that is a little wordy. Updated to `read_limit` since this is an upper bound to protect against over consuming bytes the decoder doesn't know what to do with.
1 parent c2ad0b1 commit 7251d0c

8 files changed

Lines changed: 32 additions & 33 deletions

File tree

consensus_encoding/src/decode/decoders.rs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,10 @@ impl Decoder for ByteVecDecoder {
9999
}
100100
}
101101

102-
fn min_bytes_needed(&self) -> usize {
102+
fn read_limit(&self) -> usize {
103103
if !self.prefix_read {
104104
return match &self.prefix_decoder {
105-
Some(compact_size_decoder) => compact_size_decoder.min_bytes_needed(),
105+
Some(compact_size_decoder) => compact_size_decoder.read_limit(),
106106
None => 1,
107107
};
108108
}
@@ -199,20 +199,20 @@ impl<T: Decodable> Decoder for VecDecoder<T> {
199199
}
200200
}
201201

202-
fn min_bytes_needed(&self) -> usize {
202+
fn read_limit(&self) -> usize {
203203
if let Some(prefix_decoder) = &self.prefix_decoder {
204-
prefix_decoder.min_bytes_needed()
204+
prefix_decoder.read_limit()
205205
} else if let Some(decoder) = &self.decoder {
206-
decoder.min_bytes_needed()
206+
decoder.read_limit()
207207
} else if self.buffer.len() == self.length {
208208
// Totally done.
209209
0
210210
} else {
211211
let items_left_to_decode = self.length - self.buffer.len();
212212
let decoder = T::decoder();
213213
// This could be inaccurate (eg 1 for a `ByteVecDecoder`) but its the best we can do.
214-
let min_per_decoder = decoder.min_bytes_needed();
215-
items_left_to_decode * min_per_decoder
214+
let limit_per_decoder = decoder.read_limit();
215+
items_left_to_decode * limit_per_decoder
216216
}
217217
}
218218
}
@@ -280,7 +280,7 @@ impl<const N: usize> Decoder for ArrayDecoder<N> {
280280
}
281281

282282
#[inline]
283-
fn min_bytes_needed(&self) -> usize { N - self.bytes_written }
283+
fn read_limit(&self) -> usize { N - self.bytes_written }
284284
}
285285

286286
/// A decoder which wraps two inner decoders and returns the output of both.
@@ -401,11 +401,11 @@ where
401401
}
402402

403403
#[inline]
404-
fn min_bytes_needed(&self) -> usize {
404+
fn read_limit(&self) -> usize {
405405
match &self.state {
406406
Decoder2State::First(first_decoder, second_decoder) =>
407-
first_decoder.min_bytes_needed() + second_decoder.min_bytes_needed(),
408-
Decoder2State::Second(_, second_decoder) => second_decoder.min_bytes_needed(),
407+
first_decoder.read_limit() + second_decoder.read_limit(),
408+
Decoder2State::Second(_, second_decoder) => second_decoder.read_limit(),
409409
Decoder2State::Errored => 0,
410410
Decoder2State::Transitioning => 0,
411411
}
@@ -459,7 +459,7 @@ where
459459
}
460460

461461
#[inline]
462-
fn min_bytes_needed(&self) -> usize { self.inner.min_bytes_needed() }
462+
fn read_limit(&self) -> usize { self.inner.read_limit() }
463463
}
464464

465465
/// A decoder which decodes four objects, one after the other.
@@ -515,7 +515,7 @@ where
515515
}
516516

517517
#[inline]
518-
fn min_bytes_needed(&self) -> usize { self.inner.min_bytes_needed() }
518+
fn read_limit(&self) -> usize { self.inner.read_limit() }
519519
}
520520

521521
/// A decoder which decodes six objects, one after the other.
@@ -596,7 +596,7 @@ where
596596
}
597597

598598
#[inline]
599-
fn min_bytes_needed(&self) -> usize { self.inner.min_bytes_needed() }
599+
fn read_limit(&self) -> usize { self.inner.read_limit() }
600600
}
601601

602602
/// Decodes a compact size encoded integer.
@@ -685,7 +685,7 @@ impl Decoder for CompactSizeDecoder {
685685
}
686686
}
687687

688-
fn min_bytes_needed(&self) -> usize {
688+
fn read_limit(&self) -> usize {
689689
match self.buf.len() {
690690
0 => 1,
691691
already_read => match self.buf[0] {
@@ -990,7 +990,7 @@ mod tests {
990990
Ok(Inner(n))
991991
}
992992

993-
fn min_bytes_needed(&self) -> usize { self.0.min_bytes_needed() }
993+
fn read_limit(&self) -> usize { self.0.read_limit() }
994994
}
995995

996996
#[cfg(feature = "alloc")]
@@ -1022,7 +1022,7 @@ mod tests {
10221022
Ok(Test(v))
10231023
}
10241024

1025-
fn min_bytes_needed(&self) -> usize { self.0.min_bytes_needed() }
1025+
fn read_limit(&self) -> usize { self.0.read_limit() }
10261026
}
10271027

10281028
#[cfg(feature = "alloc")]

consensus_encoding/src/decode/mod.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,12 @@ pub trait Decoder: Sized {
5959
#[must_use = "must check result to avoid panics on subsequent calls"]
6060
fn end(self) -> Result<Self::Output, Self::Error>;
6161

62-
/// Returns the minimum number of bytes needed to advance the state of the
63-
/// decoder while ensuring there are no over-reads.
62+
/// Returns the maximum number of bytes this decoder can consume without over-reading.
6463
///
6564
/// Returns 0 if the decoder is complete and ready to finalize with [`Self::end`].
6665
/// This is used by [`decode_from_read_unbuffered`] to optimize read sizes,
67-
/// avoiding both inefficient under reads and unnecessary over-reads.
68-
fn min_bytes_needed(&self) -> usize;
66+
/// avoiding both inefficient under-reads and unnecessary over-reads.
67+
fn read_limit(&self) -> usize;
6968
}
7069

7170
/// Decodes an object from a byte slice.
@@ -192,9 +191,9 @@ where
192191
let mut decoder = T::decoder();
193192
let mut buffer = [0u8; BUFFER_SIZE];
194193

195-
while decoder.min_bytes_needed() > 0 {
194+
while decoder.read_limit() > 0 {
196195
// Only read what we need, up to buffer size.
197-
let clamped_buffer = &mut buffer[..decoder.min_bytes_needed().min(BUFFER_SIZE)];
196+
let clamped_buffer = &mut buffer[..decoder.read_limit().min(BUFFER_SIZE)];
198197
match reader.read(clamped_buffer) {
199198
Ok(0) => {
200199
// EOF, but still try to finalize the decoder.
@@ -288,7 +287,7 @@ mod tests {
288287

289288
fn end(self) -> Result<Self::Output, Self::Error> { self.inner.end().map(TestArray) }
290289

291-
fn min_bytes_needed(&self) -> usize { self.inner.min_bytes_needed() }
290+
fn read_limit(&self) -> usize { self.inner.read_limit() }
292291
}
293292

294293
#[test]

consensus_encoding/tests/composition.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ impl Decoder for CompositeDataDecoder {
6969
Ok(CompositeData { first, second })
7070
}
7171

72-
fn min_bytes_needed(&self) -> usize { self.inner.min_bytes_needed() }
72+
fn read_limit(&self) -> usize { self.inner.read_limit() }
7373
}
7474

7575
impl Decodable for CompositeData {
@@ -220,7 +220,7 @@ fn composition_error_unification() {
220220
Ok((first, second))
221221
}
222222

223-
fn min_bytes_needed(&self) -> usize { self.inner.min_bytes_needed() }
223+
fn read_limit(&self) -> usize { self.inner.read_limit() }
224224
}
225225

226226
/// Another test composite decoder.
@@ -245,7 +245,7 @@ fn composition_error_unification() {
245245
Ok(result)
246246
}
247247

248-
fn min_bytes_needed(&self) -> usize { self.inner.min_bytes_needed() }
248+
fn read_limit(&self) -> usize { self.inner.read_limit() }
249249
}
250250

251251
/// A decoder which can fail.
@@ -274,7 +274,7 @@ fn composition_error_unification() {
274274
}
275275
}
276276

277-
fn min_bytes_needed(&self) -> usize { self.inner.min_bytes_needed() }
277+
fn read_limit(&self) -> usize { self.inner.read_limit() }
278278
}
279279

280280
// A multi-layer, nested, decoder structure with a unified top level error type.

units/src/amount/unsigned.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -610,7 +610,7 @@ impl encoding::Decoder for AmountDecoder {
610610
}
611611

612612
#[inline]
613-
fn min_bytes_needed(&self) -> usize { self.0.min_bytes_needed() }
613+
fn read_limit(&self) -> usize { self.0.read_limit() }
614614
}
615615

616616
#[cfg(feature = "encoding")]

units/src/block.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ impl encoding::Decoder for BlockHeightDecoder {
193193
}
194194

195195
#[inline]
196-
fn min_bytes_needed(&self) -> usize { self.0.min_bytes_needed() }
196+
fn read_limit(&self) -> usize { self.0.read_limit() }
197197
}
198198

199199
#[cfg(feature = "encoding")]

units/src/locktime/absolute/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ impl encoding::Decoder for LockTimeDecoder {
451451
}
452452

453453
#[inline]
454-
fn min_bytes_needed(&self) -> usize { self.0.min_bytes_needed() }
454+
fn read_limit(&self) -> usize { self.0.read_limit() }
455455
}
456456

457457
#[cfg(feature = "encoding")]

units/src/sequence.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ impl encoding::Decoder for SequenceDecoder {
316316
}
317317

318318
#[inline]
319-
fn min_bytes_needed(&self) -> usize { self.0.min_bytes_needed() }
319+
fn read_limit(&self) -> usize { self.0.read_limit() }
320320
}
321321

322322
#[cfg(feature = "encoding")]

units/src/time.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ impl encoding::Decoder for BlockTimeDecoder {
126126
}
127127

128128
#[inline]
129-
fn min_bytes_needed(&self) -> usize { self.0.min_bytes_needed() }
129+
fn read_limit(&self) -> usize { self.0.read_limit() }
130130
}
131131

132132
#[cfg(feature = "encoding")]

0 commit comments

Comments
 (0)