Coverage Report

Created: 2024-10-16 07:58

/rust/registry/src/index.crates.io-6f17d22bba15001f/bytes-1.6.1/src/buf/buf_mut.rs
Line
Count
Source (jump to first uncovered line)
1
use crate::buf::{limit, Chain, Limit, UninitSlice};
2
#[cfg(feature = "std")]
3
use crate::buf::{writer, Writer};
4
use crate::{panic_advance, panic_does_not_fit};
5
6
use core::{mem, ptr, usize};
7
8
use alloc::{boxed::Box, vec::Vec};
9
10
/// A trait for values that provide sequential write access to bytes.
11
///
12
/// Write bytes to a buffer
13
///
14
/// A buffer stores bytes in memory such that write operations are infallible.
15
/// The underlying storage may or may not be in contiguous memory. A `BufMut`
16
/// value is a cursor into the buffer. Writing to `BufMut` advances the cursor
17
/// position.
18
///
19
/// The simplest `BufMut` is a `Vec<u8>`.
20
///
21
/// ```
22
/// use bytes::BufMut;
23
///
24
/// let mut buf = vec![];
25
///
26
/// buf.put(&b"hello world"[..]);
27
///
28
/// assert_eq!(buf, b"hello world");
29
/// ```
30
pub unsafe trait BufMut {
31
    /// Returns the number of bytes that can be written from the current
32
    /// position until the end of the buffer is reached.
33
    ///
34
    /// This value is greater than or equal to the length of the slice returned
35
    /// by `chunk_mut()`.
36
    ///
37
    /// Writing to a `BufMut` may involve allocating more memory on the fly.
38
    /// Implementations may fail before reaching the number of bytes indicated
39
    /// by this method if they encounter an allocation failure.
40
    ///
41
    /// # Examples
42
    ///
43
    /// ```
44
    /// use bytes::BufMut;
45
    ///
46
    /// let mut dst = [0; 10];
47
    /// let mut buf = &mut dst[..];
48
    ///
49
    /// let original_remaining = buf.remaining_mut();
50
    /// buf.put(&b"hello"[..]);
51
    ///
52
    /// assert_eq!(original_remaining - 5, buf.remaining_mut());
53
    /// ```
54
    ///
55
    /// # Implementer notes
56
    ///
57
    /// Implementations of `remaining_mut` should ensure that the return value
58
    /// does not change unless a call is made to `advance_mut` or any other
59
    /// function that is documented to change the `BufMut`'s current position.
60
    ///
61
    /// # Note
62
    ///
63
    /// `remaining_mut` may return value smaller than actual available space.
64
    fn remaining_mut(&self) -> usize;
65
66
    /// Advance the internal cursor of the BufMut
67
    ///
68
    /// The next call to `chunk_mut` will return a slice starting `cnt` bytes
69
    /// further into the underlying buffer.
70
    ///
71
    /// # Safety
72
    ///
73
    /// The caller must ensure that the next `cnt` bytes of `chunk` are
74
    /// initialized.
75
    ///
76
    /// # Examples
77
    ///
78
    /// ```
79
    /// use bytes::BufMut;
80
    ///
81
    /// let mut buf = Vec::with_capacity(16);
82
    ///
83
    /// // Write some data
84
    /// buf.chunk_mut()[0..2].copy_from_slice(b"he");
85
    /// unsafe { buf.advance_mut(2) };
86
    ///
87
    /// // write more bytes
88
    /// buf.chunk_mut()[0..3].copy_from_slice(b"llo");
89
    ///
90
    /// unsafe { buf.advance_mut(3); }
91
    ///
92
    /// assert_eq!(5, buf.len());
93
    /// assert_eq!(buf, b"hello");
94
    /// ```
95
    ///
96
    /// # Panics
97
    ///
98
    /// This function **may** panic if `cnt > self.remaining_mut()`.
99
    ///
100
    /// # Implementer notes
101
    ///
102
    /// It is recommended for implementations of `advance_mut` to panic if
103
    /// `cnt > self.remaining_mut()`. If the implementation does not panic,
104
    /// the call must behave as if `cnt == self.remaining_mut()`.
105
    ///
106
    /// A call with `cnt == 0` should never panic and be a no-op.
107
    unsafe fn advance_mut(&mut self, cnt: usize);
108
109
    /// Returns true if there is space in `self` for more bytes.
110
    ///
111
    /// This is equivalent to `self.remaining_mut() != 0`.
112
    ///
113
    /// # Examples
114
    ///
115
    /// ```
116
    /// use bytes::BufMut;
117
    ///
118
    /// let mut dst = [0; 5];
119
    /// let mut buf = &mut dst[..];
120
    ///
121
    /// assert!(buf.has_remaining_mut());
122
    ///
123
    /// buf.put(&b"hello"[..]);
124
    ///
125
    /// assert!(!buf.has_remaining_mut());
126
    /// ```
127
    #[inline]
128
0
    fn has_remaining_mut(&self) -> bool {
129
0
        self.remaining_mut() > 0
130
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::has_remaining_mut
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::has_remaining_mut
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::has_remaining_mut
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::has_remaining_mut
131
132
    /// Returns a mutable slice starting at the current BufMut position and of
133
    /// length between 0 and `BufMut::remaining_mut()`. Note that this *can* be shorter than the
134
    /// whole remainder of the buffer (this allows non-continuous implementation).
135
    ///
136
    /// This is a lower level function. Most operations are done with other
137
    /// functions.
138
    ///
139
    /// The returned byte slice may represent uninitialized memory.
140
    ///
141
    /// # Examples
142
    ///
143
    /// ```
144
    /// use bytes::BufMut;
145
    ///
146
    /// let mut buf = Vec::with_capacity(16);
147
    ///
148
    /// unsafe {
149
    ///     // MaybeUninit::as_mut_ptr
150
    ///     buf.chunk_mut()[0..].as_mut_ptr().write(b'h');
151
    ///     buf.chunk_mut()[1..].as_mut_ptr().write(b'e');
152
    ///
153
    ///     buf.advance_mut(2);
154
    ///
155
    ///     buf.chunk_mut()[0..].as_mut_ptr().write(b'l');
156
    ///     buf.chunk_mut()[1..].as_mut_ptr().write(b'l');
157
    ///     buf.chunk_mut()[2..].as_mut_ptr().write(b'o');
158
    ///
159
    ///     buf.advance_mut(3);
160
    /// }
161
    ///
162
    /// assert_eq!(5, buf.len());
163
    /// assert_eq!(buf, b"hello");
164
    /// ```
165
    ///
166
    /// # Implementer notes
167
    ///
168
    /// This function should never panic. `chunk_mut` should return an empty
169
    /// slice **if and only if** `remaining_mut()` returns 0. In other words,
170
    /// `chunk_mut()` returning an empty slice implies that `remaining_mut()` will
171
    /// return 0 and `remaining_mut()` returning 0 implies that `chunk_mut()` will
172
    /// return an empty slice.
173
    ///
174
    /// This function may trigger an out-of-memory abort if it tries to allocate
175
    /// memory and fails to do so.
176
    // The `chunk_mut` method was previously called `bytes_mut`. This alias makes the
177
    // rename more easily discoverable.
178
    #[cfg_attr(docsrs, doc(alias = "bytes_mut"))]
179
    fn chunk_mut(&mut self) -> &mut UninitSlice;
180
181
    /// Transfer bytes into `self` from `src` and advance the cursor by the
182
    /// number of bytes written.
183
    ///
184
    /// # Examples
185
    ///
186
    /// ```
187
    /// use bytes::BufMut;
188
    ///
189
    /// let mut buf = vec![];
190
    ///
191
    /// buf.put_u8(b'h');
192
    /// buf.put(&b"ello"[..]);
193
    /// buf.put(&b" world"[..]);
194
    ///
195
    /// assert_eq!(buf, b"hello world");
196
    /// ```
197
    ///
198
    /// # Panics
199
    ///
200
    /// Panics if `self` does not have enough capacity to contain `src`.
201
    #[inline]
202
0
    fn put<T: super::Buf>(&mut self, mut src: T)
203
0
    where
204
0
        Self: Sized,
205
0
    {
206
0
        if self.remaining_mut() < src.remaining() {
207
0
            panic_advance(src.remaining(), self.remaining_mut());
208
0
        }
209
210
0
        while src.has_remaining() {
211
0
            let s = src.chunk();
212
0
            let d = self.chunk_mut();
213
0
            let cnt = usize::min(s.len(), d.len());
214
0
215
0
            d[..cnt].copy_from_slice(&s[..cnt]);
216
0
217
0
            // SAFETY: We just initialized `cnt` bytes in `self`.
218
0
            unsafe { self.advance_mut(cnt) };
219
0
            src.advance(cnt);
220
0
        }
221
0
    }
222
223
    /// Transfer bytes into `self` from `src` and advance the cursor by the
224
    /// number of bytes written.
225
    ///
226
    /// `self` must have enough remaining capacity to contain all of `src`.
227
    ///
228
    /// ```
229
    /// use bytes::BufMut;
230
    ///
231
    /// let mut dst = [0; 6];
232
    ///
233
    /// {
234
    ///     let mut buf = &mut dst[..];
235
    ///     buf.put_slice(b"hello");
236
    ///
237
    ///     assert_eq!(1, buf.remaining_mut());
238
    /// }
239
    ///
240
    /// assert_eq!(b"hello\0", &dst);
241
    /// ```
242
    #[inline]
243
0
    fn put_slice(&mut self, mut src: &[u8]) {
244
0
        if self.remaining_mut() < src.len() {
245
0
            panic_advance(src.len(), self.remaining_mut());
246
0
        }
247
248
0
        while !src.is_empty() {
249
0
            let dst = self.chunk_mut();
250
0
            let cnt = usize::min(src.len(), dst.len());
251
0
252
0
            dst[..cnt].copy_from_slice(&src[..cnt]);
253
0
            src = &src[cnt..];
254
0
255
0
            // SAFETY: We just initialized `cnt` bytes in `self`.
256
0
            unsafe { self.advance_mut(cnt) };
257
0
        }
258
0
    }
259
260
    /// Put `cnt` bytes `val` into `self`.
261
    ///
262
    /// Logically equivalent to calling `self.put_u8(val)` `cnt` times, but may work faster.
263
    ///
264
    /// `self` must have at least `cnt` remaining capacity.
265
    ///
266
    /// ```
267
    /// use bytes::BufMut;
268
    ///
269
    /// let mut dst = [0; 6];
270
    ///
271
    /// {
272
    ///     let mut buf = &mut dst[..];
273
    ///     buf.put_bytes(b'a', 4);
274
    ///
275
    ///     assert_eq!(2, buf.remaining_mut());
276
    /// }
277
    ///
278
    /// assert_eq!(b"aaaa\0\0", &dst);
279
    /// ```
280
    ///
281
    /// # Panics
282
    ///
283
    /// This function panics if there is not enough remaining capacity in
284
    /// `self`.
285
    #[inline]
286
0
    fn put_bytes(&mut self, val: u8, mut cnt: usize) {
287
0
        if self.remaining_mut() < cnt {
288
0
            panic_advance(cnt, self.remaining_mut());
289
0
        }
290
291
0
        while cnt > 0 {
292
0
            let dst = self.chunk_mut();
293
0
            let dst_len = usize::min(dst.len(), cnt);
294
0
            // SAFETY: The pointer is valid for `dst_len <= dst.len()` bytes.
295
0
            unsafe { core::ptr::write_bytes(dst.as_mut_ptr(), val, dst_len) };
296
0
            // SAFETY: We just initialized `dst_len` bytes in `self`.
297
0
            unsafe { self.advance_mut(dst_len) };
298
0
            cnt -= dst_len;
299
0
        }
300
0
    }
301
302
    /// Writes an unsigned 8 bit integer to `self`.
303
    ///
304
    /// The current position is advanced by 1.
305
    ///
306
    /// # Examples
307
    ///
308
    /// ```
309
    /// use bytes::BufMut;
310
    ///
311
    /// let mut buf = vec![];
312
    /// buf.put_u8(0x01);
313
    /// assert_eq!(buf, b"\x01");
314
    /// ```
315
    ///
316
    /// # Panics
317
    ///
318
    /// This function panics if there is not enough remaining capacity in
319
    /// `self`.
320
    #[inline]
321
0
    fn put_u8(&mut self, n: u8) {
322
0
        let src = [n];
323
0
        self.put_slice(&src);
324
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_u8
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_u8
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_u8
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_u8
325
326
    /// Writes a signed 8 bit integer to `self`.
327
    ///
328
    /// The current position is advanced by 1.
329
    ///
330
    /// # Examples
331
    ///
332
    /// ```
333
    /// use bytes::BufMut;
334
    ///
335
    /// let mut buf = vec![];
336
    /// buf.put_i8(0x01);
337
    /// assert_eq!(buf, b"\x01");
338
    /// ```
339
    ///
340
    /// # Panics
341
    ///
342
    /// This function panics if there is not enough remaining capacity in
343
    /// `self`.
344
    #[inline]
345
0
    fn put_i8(&mut self, n: i8) {
346
0
        let src = [n as u8];
347
0
        self.put_slice(&src)
348
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_i8
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_i8
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_i8
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_i8
349
350
    /// Writes an unsigned 16 bit integer to `self` in big-endian byte order.
351
    ///
352
    /// The current position is advanced by 2.
353
    ///
354
    /// # Examples
355
    ///
356
    /// ```
357
    /// use bytes::BufMut;
358
    ///
359
    /// let mut buf = vec![];
360
    /// buf.put_u16(0x0809);
361
    /// assert_eq!(buf, b"\x08\x09");
362
    /// ```
363
    ///
364
    /// # Panics
365
    ///
366
    /// This function panics if there is not enough remaining capacity in
367
    /// `self`.
368
    #[inline]
369
0
    fn put_u16(&mut self, n: u16) {
370
0
        self.put_slice(&n.to_be_bytes())
371
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_u16
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_u16
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_u16
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_u16
372
373
    /// Writes an unsigned 16 bit integer to `self` in little-endian byte order.
374
    ///
375
    /// The current position is advanced by 2.
376
    ///
377
    /// # Examples
378
    ///
379
    /// ```
380
    /// use bytes::BufMut;
381
    ///
382
    /// let mut buf = vec![];
383
    /// buf.put_u16_le(0x0809);
384
    /// assert_eq!(buf, b"\x09\x08");
385
    /// ```
386
    ///
387
    /// # Panics
388
    ///
389
    /// This function panics if there is not enough remaining capacity in
390
    /// `self`.
391
    #[inline]
392
0
    fn put_u16_le(&mut self, n: u16) {
393
0
        self.put_slice(&n.to_le_bytes())
394
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_u16_le
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_u16_le
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_u16_le
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_u16_le
395
396
    /// Writes an unsigned 16 bit integer to `self` in native-endian byte order.
397
    ///
398
    /// The current position is advanced by 2.
399
    ///
400
    /// # Examples
401
    ///
402
    /// ```
403
    /// use bytes::BufMut;
404
    ///
405
    /// let mut buf = vec![];
406
    /// buf.put_u16_ne(0x0809);
407
    /// if cfg!(target_endian = "big") {
408
    ///     assert_eq!(buf, b"\x08\x09");
409
    /// } else {
410
    ///     assert_eq!(buf, b"\x09\x08");
411
    /// }
412
    /// ```
413
    ///
414
    /// # Panics
415
    ///
416
    /// This function panics if there is not enough remaining capacity in
417
    /// `self`.
418
    #[inline]
419
0
    fn put_u16_ne(&mut self, n: u16) {
420
0
        self.put_slice(&n.to_ne_bytes())
421
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_u16_ne
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_u16_ne
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_u16_ne
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_u16_ne
422
423
    /// Writes a signed 16 bit integer to `self` in big-endian byte order.
424
    ///
425
    /// The current position is advanced by 2.
426
    ///
427
    /// # Examples
428
    ///
429
    /// ```
430
    /// use bytes::BufMut;
431
    ///
432
    /// let mut buf = vec![];
433
    /// buf.put_i16(0x0809);
434
    /// assert_eq!(buf, b"\x08\x09");
435
    /// ```
436
    ///
437
    /// # Panics
438
    ///
439
    /// This function panics if there is not enough remaining capacity in
440
    /// `self`.
441
    #[inline]
442
0
    fn put_i16(&mut self, n: i16) {
443
0
        self.put_slice(&n.to_be_bytes())
444
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_i16
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_i16
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_i16
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_i16
445
446
    /// Writes a signed 16 bit integer to `self` in little-endian byte order.
447
    ///
448
    /// The current position is advanced by 2.
449
    ///
450
    /// # Examples
451
    ///
452
    /// ```
453
    /// use bytes::BufMut;
454
    ///
455
    /// let mut buf = vec![];
456
    /// buf.put_i16_le(0x0809);
457
    /// assert_eq!(buf, b"\x09\x08");
458
    /// ```
459
    ///
460
    /// # Panics
461
    ///
462
    /// This function panics if there is not enough remaining capacity in
463
    /// `self`.
464
    #[inline]
465
0
    fn put_i16_le(&mut self, n: i16) {
466
0
        self.put_slice(&n.to_le_bytes())
467
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_i16_le
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_i16_le
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_i16_le
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_i16_le
468
469
    /// Writes a signed 16 bit integer to `self` in native-endian byte order.
470
    ///
471
    /// The current position is advanced by 2.
472
    ///
473
    /// # Examples
474
    ///
475
    /// ```
476
    /// use bytes::BufMut;
477
    ///
478
    /// let mut buf = vec![];
479
    /// buf.put_i16_ne(0x0809);
480
    /// if cfg!(target_endian = "big") {
481
    ///     assert_eq!(buf, b"\x08\x09");
482
    /// } else {
483
    ///     assert_eq!(buf, b"\x09\x08");
484
    /// }
485
    /// ```
486
    ///
487
    /// # Panics
488
    ///
489
    /// This function panics if there is not enough remaining capacity in
490
    /// `self`.
491
    #[inline]
492
0
    fn put_i16_ne(&mut self, n: i16) {
493
0
        self.put_slice(&n.to_ne_bytes())
494
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_i16_ne
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_i16_ne
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_i16_ne
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_i16_ne
495
496
    /// Writes an unsigned 32 bit integer to `self` in big-endian byte order.
497
    ///
498
    /// The current position is advanced by 4.
499
    ///
500
    /// # Examples
501
    ///
502
    /// ```
503
    /// use bytes::BufMut;
504
    ///
505
    /// let mut buf = vec![];
506
    /// buf.put_u32(0x0809A0A1);
507
    /// assert_eq!(buf, b"\x08\x09\xA0\xA1");
508
    /// ```
509
    ///
510
    /// # Panics
511
    ///
512
    /// This function panics if there is not enough remaining capacity in
513
    /// `self`.
514
    #[inline]
515
0
    fn put_u32(&mut self, n: u32) {
516
0
        self.put_slice(&n.to_be_bytes())
517
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_u32
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_u32
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_u32
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_u32
518
519
    /// Writes an unsigned 32 bit integer to `self` in little-endian byte order.
520
    ///
521
    /// The current position is advanced by 4.
522
    ///
523
    /// # Examples
524
    ///
525
    /// ```
526
    /// use bytes::BufMut;
527
    ///
528
    /// let mut buf = vec![];
529
    /// buf.put_u32_le(0x0809A0A1);
530
    /// assert_eq!(buf, b"\xA1\xA0\x09\x08");
531
    /// ```
532
    ///
533
    /// # Panics
534
    ///
535
    /// This function panics if there is not enough remaining capacity in
536
    /// `self`.
537
    #[inline]
538
0
    fn put_u32_le(&mut self, n: u32) {
539
0
        self.put_slice(&n.to_le_bytes())
540
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_u32_le
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_u32_le
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_u32_le
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_u32_le
541
542
    /// Writes an unsigned 32 bit integer to `self` in native-endian byte order.
543
    ///
544
    /// The current position is advanced by 4.
545
    ///
546
    /// # Examples
547
    ///
548
    /// ```
549
    /// use bytes::BufMut;
550
    ///
551
    /// let mut buf = vec![];
552
    /// buf.put_u32_ne(0x0809A0A1);
553
    /// if cfg!(target_endian = "big") {
554
    ///     assert_eq!(buf, b"\x08\x09\xA0\xA1");
555
    /// } else {
556
    ///     assert_eq!(buf, b"\xA1\xA0\x09\x08");
557
    /// }
558
    /// ```
559
    ///
560
    /// # Panics
561
    ///
562
    /// This function panics if there is not enough remaining capacity in
563
    /// `self`.
564
    #[inline]
565
0
    fn put_u32_ne(&mut self, n: u32) {
566
0
        self.put_slice(&n.to_ne_bytes())
567
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_u32_ne
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_u32_ne
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_u32_ne
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_u32_ne
568
569
    /// Writes a signed 32 bit integer to `self` in big-endian byte order.
570
    ///
571
    /// The current position is advanced by 4.
572
    ///
573
    /// # Examples
574
    ///
575
    /// ```
576
    /// use bytes::BufMut;
577
    ///
578
    /// let mut buf = vec![];
579
    /// buf.put_i32(0x0809A0A1);
580
    /// assert_eq!(buf, b"\x08\x09\xA0\xA1");
581
    /// ```
582
    ///
583
    /// # Panics
584
    ///
585
    /// This function panics if there is not enough remaining capacity in
586
    /// `self`.
587
    #[inline]
588
0
    fn put_i32(&mut self, n: i32) {
589
0
        self.put_slice(&n.to_be_bytes())
590
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_i32
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_i32
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_i32
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_i32
591
592
    /// Writes a signed 32 bit integer to `self` in little-endian byte order.
593
    ///
594
    /// The current position is advanced by 4.
595
    ///
596
    /// # Examples
597
    ///
598
    /// ```
599
    /// use bytes::BufMut;
600
    ///
601
    /// let mut buf = vec![];
602
    /// buf.put_i32_le(0x0809A0A1);
603
    /// assert_eq!(buf, b"\xA1\xA0\x09\x08");
604
    /// ```
605
    ///
606
    /// # Panics
607
    ///
608
    /// This function panics if there is not enough remaining capacity in
609
    /// `self`.
610
    #[inline]
611
0
    fn put_i32_le(&mut self, n: i32) {
612
0
        self.put_slice(&n.to_le_bytes())
613
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_i32_le
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_i32_le
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_i32_le
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_i32_le
614
615
    /// Writes a signed 32 bit integer to `self` in native-endian byte order.
616
    ///
617
    /// The current position is advanced by 4.
618
    ///
619
    /// # Examples
620
    ///
621
    /// ```
622
    /// use bytes::BufMut;
623
    ///
624
    /// let mut buf = vec![];
625
    /// buf.put_i32_ne(0x0809A0A1);
626
    /// if cfg!(target_endian = "big") {
627
    ///     assert_eq!(buf, b"\x08\x09\xA0\xA1");
628
    /// } else {
629
    ///     assert_eq!(buf, b"\xA1\xA0\x09\x08");
630
    /// }
631
    /// ```
632
    ///
633
    /// # Panics
634
    ///
635
    /// This function panics if there is not enough remaining capacity in
636
    /// `self`.
637
    #[inline]
638
0
    fn put_i32_ne(&mut self, n: i32) {
639
0
        self.put_slice(&n.to_ne_bytes())
640
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_i32_ne
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_i32_ne
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_i32_ne
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_i32_ne
641
642
    /// Writes an unsigned 64 bit integer to `self` in the big-endian byte order.
643
    ///
644
    /// The current position is advanced by 8.
645
    ///
646
    /// # Examples
647
    ///
648
    /// ```
649
    /// use bytes::BufMut;
650
    ///
651
    /// let mut buf = vec![];
652
    /// buf.put_u64(0x0102030405060708);
653
    /// assert_eq!(buf, b"\x01\x02\x03\x04\x05\x06\x07\x08");
654
    /// ```
655
    ///
656
    /// # Panics
657
    ///
658
    /// This function panics if there is not enough remaining capacity in
659
    /// `self`.
660
    #[inline]
661
0
    fn put_u64(&mut self, n: u64) {
662
0
        self.put_slice(&n.to_be_bytes())
663
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_u64
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_u64
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_u64
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_u64
664
665
    /// Writes an unsigned 64 bit integer to `self` in little-endian byte order.
666
    ///
667
    /// The current position is advanced by 8.
668
    ///
669
    /// # Examples
670
    ///
671
    /// ```
672
    /// use bytes::BufMut;
673
    ///
674
    /// let mut buf = vec![];
675
    /// buf.put_u64_le(0x0102030405060708);
676
    /// assert_eq!(buf, b"\x08\x07\x06\x05\x04\x03\x02\x01");
677
    /// ```
678
    ///
679
    /// # Panics
680
    ///
681
    /// This function panics if there is not enough remaining capacity in
682
    /// `self`.
683
    #[inline]
684
0
    fn put_u64_le(&mut self, n: u64) {
685
0
        self.put_slice(&n.to_le_bytes())
686
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_u64_le
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_u64_le
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_u64_le
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_u64_le
687
688
    /// Writes an unsigned 64 bit integer to `self` in native-endian byte order.
689
    ///
690
    /// The current position is advanced by 8.
691
    ///
692
    /// # Examples
693
    ///
694
    /// ```
695
    /// use bytes::BufMut;
696
    ///
697
    /// let mut buf = vec![];
698
    /// buf.put_u64_ne(0x0102030405060708);
699
    /// if cfg!(target_endian = "big") {
700
    ///     assert_eq!(buf, b"\x01\x02\x03\x04\x05\x06\x07\x08");
701
    /// } else {
702
    ///     assert_eq!(buf, b"\x08\x07\x06\x05\x04\x03\x02\x01");
703
    /// }
704
    /// ```
705
    ///
706
    /// # Panics
707
    ///
708
    /// This function panics if there is not enough remaining capacity in
709
    /// `self`.
710
    #[inline]
711
0
    fn put_u64_ne(&mut self, n: u64) {
712
0
        self.put_slice(&n.to_ne_bytes())
713
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_u64_ne
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_u64_ne
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_u64_ne
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_u64_ne
714
715
    /// Writes a signed 64 bit integer to `self` in the big-endian byte order.
716
    ///
717
    /// The current position is advanced by 8.
718
    ///
719
    /// # Examples
720
    ///
721
    /// ```
722
    /// use bytes::BufMut;
723
    ///
724
    /// let mut buf = vec![];
725
    /// buf.put_i64(0x0102030405060708);
726
    /// assert_eq!(buf, b"\x01\x02\x03\x04\x05\x06\x07\x08");
727
    /// ```
728
    ///
729
    /// # Panics
730
    ///
731
    /// This function panics if there is not enough remaining capacity in
732
    /// `self`.
733
    #[inline]
734
0
    fn put_i64(&mut self, n: i64) {
735
0
        self.put_slice(&n.to_be_bytes())
736
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_i64
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_i64
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_i64
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_i64
737
738
    /// Writes a signed 64 bit integer to `self` in little-endian byte order.
739
    ///
740
    /// The current position is advanced by 8.
741
    ///
742
    /// # Examples
743
    ///
744
    /// ```
745
    /// use bytes::BufMut;
746
    ///
747
    /// let mut buf = vec![];
748
    /// buf.put_i64_le(0x0102030405060708);
749
    /// assert_eq!(buf, b"\x08\x07\x06\x05\x04\x03\x02\x01");
750
    /// ```
751
    ///
752
    /// # Panics
753
    ///
754
    /// This function panics if there is not enough remaining capacity in
755
    /// `self`.
756
    #[inline]
757
0
    fn put_i64_le(&mut self, n: i64) {
758
0
        self.put_slice(&n.to_le_bytes())
759
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_i64_le
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_i64_le
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_i64_le
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_i64_le
760
761
    /// Writes a signed 64 bit integer to `self` in native-endian byte order.
762
    ///
763
    /// The current position is advanced by 8.
764
    ///
765
    /// # Examples
766
    ///
767
    /// ```
768
    /// use bytes::BufMut;
769
    ///
770
    /// let mut buf = vec![];
771
    /// buf.put_i64_ne(0x0102030405060708);
772
    /// if cfg!(target_endian = "big") {
773
    ///     assert_eq!(buf, b"\x01\x02\x03\x04\x05\x06\x07\x08");
774
    /// } else {
775
    ///     assert_eq!(buf, b"\x08\x07\x06\x05\x04\x03\x02\x01");
776
    /// }
777
    /// ```
778
    ///
779
    /// # Panics
780
    ///
781
    /// This function panics if there is not enough remaining capacity in
782
    /// `self`.
783
    #[inline]
784
0
    fn put_i64_ne(&mut self, n: i64) {
785
0
        self.put_slice(&n.to_ne_bytes())
786
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_i64_ne
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_i64_ne
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_i64_ne
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_i64_ne
787
788
    /// Writes an unsigned 128 bit integer to `self` in the big-endian byte order.
789
    ///
790
    /// The current position is advanced by 16.
791
    ///
792
    /// # Examples
793
    ///
794
    /// ```
795
    /// use bytes::BufMut;
796
    ///
797
    /// let mut buf = vec![];
798
    /// buf.put_u128(0x01020304050607080910111213141516);
799
    /// assert_eq!(buf, b"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x10\x11\x12\x13\x14\x15\x16");
800
    /// ```
801
    ///
802
    /// # Panics
803
    ///
804
    /// This function panics if there is not enough remaining capacity in
805
    /// `self`.
806
    #[inline]
807
0
    fn put_u128(&mut self, n: u128) {
808
0
        self.put_slice(&n.to_be_bytes())
809
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_u128
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_u128
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_u128
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_u128
810
811
    /// Writes an unsigned 128 bit integer to `self` in little-endian byte order.
812
    ///
813
    /// The current position is advanced by 16.
814
    ///
815
    /// # Examples
816
    ///
817
    /// ```
818
    /// use bytes::BufMut;
819
    ///
820
    /// let mut buf = vec![];
821
    /// buf.put_u128_le(0x01020304050607080910111213141516);
822
    /// assert_eq!(buf, b"\x16\x15\x14\x13\x12\x11\x10\x09\x08\x07\x06\x05\x04\x03\x02\x01");
823
    /// ```
824
    ///
825
    /// # Panics
826
    ///
827
    /// This function panics if there is not enough remaining capacity in
828
    /// `self`.
829
    #[inline]
830
0
    fn put_u128_le(&mut self, n: u128) {
831
0
        self.put_slice(&n.to_le_bytes())
832
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_u128_le
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_u128_le
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_u128_le
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_u128_le
833
834
    /// Writes an unsigned 128 bit integer to `self` in native-endian byte order.
835
    ///
836
    /// The current position is advanced by 16.
837
    ///
838
    /// # Examples
839
    ///
840
    /// ```
841
    /// use bytes::BufMut;
842
    ///
843
    /// let mut buf = vec![];
844
    /// buf.put_u128_ne(0x01020304050607080910111213141516);
845
    /// if cfg!(target_endian = "big") {
846
    ///     assert_eq!(buf, b"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x10\x11\x12\x13\x14\x15\x16");
847
    /// } else {
848
    ///     assert_eq!(buf, b"\x16\x15\x14\x13\x12\x11\x10\x09\x08\x07\x06\x05\x04\x03\x02\x01");
849
    /// }
850
    /// ```
851
    ///
852
    /// # Panics
853
    ///
854
    /// This function panics if there is not enough remaining capacity in
855
    /// `self`.
856
    #[inline]
857
0
    fn put_u128_ne(&mut self, n: u128) {
858
0
        self.put_slice(&n.to_ne_bytes())
859
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_u128_ne
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_u128_ne
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_u128_ne
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_u128_ne
860
861
    /// Writes a signed 128 bit integer to `self` in the big-endian byte order.
862
    ///
863
    /// The current position is advanced by 16.
864
    ///
865
    /// # Examples
866
    ///
867
    /// ```
868
    /// use bytes::BufMut;
869
    ///
870
    /// let mut buf = vec![];
871
    /// buf.put_i128(0x01020304050607080910111213141516);
872
    /// assert_eq!(buf, b"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x10\x11\x12\x13\x14\x15\x16");
873
    /// ```
874
    ///
875
    /// # Panics
876
    ///
877
    /// This function panics if there is not enough remaining capacity in
878
    /// `self`.
879
    #[inline]
880
0
    fn put_i128(&mut self, n: i128) {
881
0
        self.put_slice(&n.to_be_bytes())
882
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_i128
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_i128
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_i128
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_i128
883
884
    /// Writes a signed 128 bit integer to `self` in little-endian byte order.
885
    ///
886
    /// The current position is advanced by 16.
887
    ///
888
    /// # Examples
889
    ///
890
    /// ```
891
    /// use bytes::BufMut;
892
    ///
893
    /// let mut buf = vec![];
894
    /// buf.put_i128_le(0x01020304050607080910111213141516);
895
    /// assert_eq!(buf, b"\x16\x15\x14\x13\x12\x11\x10\x09\x08\x07\x06\x05\x04\x03\x02\x01");
896
    /// ```
897
    ///
898
    /// # Panics
899
    ///
900
    /// This function panics if there is not enough remaining capacity in
901
    /// `self`.
902
    #[inline]
903
0
    fn put_i128_le(&mut self, n: i128) {
904
0
        self.put_slice(&n.to_le_bytes())
905
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_i128_le
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_i128_le
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_i128_le
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_i128_le
906
907
    /// Writes a signed 128 bit integer to `self` in native-endian byte order.
908
    ///
909
    /// The current position is advanced by 16.
910
    ///
911
    /// # Examples
912
    ///
913
    /// ```
914
    /// use bytes::BufMut;
915
    ///
916
    /// let mut buf = vec![];
917
    /// buf.put_i128_ne(0x01020304050607080910111213141516);
918
    /// if cfg!(target_endian = "big") {
919
    ///     assert_eq!(buf, b"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x10\x11\x12\x13\x14\x15\x16");
920
    /// } else {
921
    ///     assert_eq!(buf, b"\x16\x15\x14\x13\x12\x11\x10\x09\x08\x07\x06\x05\x04\x03\x02\x01");
922
    /// }
923
    /// ```
924
    ///
925
    /// # Panics
926
    ///
927
    /// This function panics if there is not enough remaining capacity in
928
    /// `self`.
929
    #[inline]
930
0
    fn put_i128_ne(&mut self, n: i128) {
931
0
        self.put_slice(&n.to_ne_bytes())
932
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_i128_ne
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_i128_ne
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_i128_ne
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_i128_ne
933
934
    /// Writes an unsigned n-byte integer to `self` in big-endian byte order.
935
    ///
936
    /// The current position is advanced by `nbytes`.
937
    ///
938
    /// # Examples
939
    ///
940
    /// ```
941
    /// use bytes::BufMut;
942
    ///
943
    /// let mut buf = vec![];
944
    /// buf.put_uint(0x010203, 3);
945
    /// assert_eq!(buf, b"\x01\x02\x03");
946
    /// ```
947
    ///
948
    /// # Panics
949
    ///
950
    /// This function panics if there is not enough remaining capacity in
951
    /// `self` or if `nbytes` is greater than 8.
952
    #[inline]
953
0
    fn put_uint(&mut self, n: u64, nbytes: usize) {
954
0
        let start = match mem::size_of_val(&n).checked_sub(nbytes) {
955
0
            Some(start) => start,
956
0
            None => panic_does_not_fit(nbytes, mem::size_of_val(&n)),
957
        };
958
959
0
        self.put_slice(&n.to_be_bytes()[start..]);
960
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_uint
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_uint
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_uint
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_uint
961
962
    /// Writes an unsigned n-byte integer to `self` in the little-endian byte order.
963
    ///
964
    /// The current position is advanced by `nbytes`.
965
    ///
966
    /// # Examples
967
    ///
968
    /// ```
969
    /// use bytes::BufMut;
970
    ///
971
    /// let mut buf = vec![];
972
    /// buf.put_uint_le(0x010203, 3);
973
    /// assert_eq!(buf, b"\x03\x02\x01");
974
    /// ```
975
    ///
976
    /// # Panics
977
    ///
978
    /// This function panics if there is not enough remaining capacity in
979
    /// `self` or if `nbytes` is greater than 8.
980
    #[inline]
981
0
    fn put_uint_le(&mut self, n: u64, nbytes: usize) {
982
0
        let slice = n.to_le_bytes();
983
0
        let slice = match slice.get(..nbytes) {
984
0
            Some(slice) => slice,
985
0
            None => panic_does_not_fit(nbytes, slice.len()),
986
        };
987
988
0
        self.put_slice(slice);
989
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_uint_le
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_uint_le
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_uint_le
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_uint_le
990
991
    /// Writes an unsigned n-byte integer to `self` in the native-endian byte order.
992
    ///
993
    /// The current position is advanced by `nbytes`.
994
    ///
995
    /// # Examples
996
    ///
997
    /// ```
998
    /// use bytes::BufMut;
999
    ///
1000
    /// let mut buf = vec![];
1001
    /// buf.put_uint_ne(0x010203, 3);
1002
    /// if cfg!(target_endian = "big") {
1003
    ///     assert_eq!(buf, b"\x01\x02\x03");
1004
    /// } else {
1005
    ///     assert_eq!(buf, b"\x03\x02\x01");
1006
    /// }
1007
    /// ```
1008
    ///
1009
    /// # Panics
1010
    ///
1011
    /// This function panics if there is not enough remaining capacity in
1012
    /// `self` or if `nbytes` is greater than 8.
1013
    #[inline]
1014
0
    fn put_uint_ne(&mut self, n: u64, nbytes: usize) {
1015
0
        if cfg!(target_endian = "big") {
1016
0
            self.put_uint(n, nbytes)
1017
        } else {
1018
0
            self.put_uint_le(n, nbytes)
1019
        }
1020
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_uint_ne
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_uint_ne
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_uint_ne
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_uint_ne
1021
1022
    /// Writes low `nbytes` of a signed integer to `self` in big-endian byte order.
1023
    ///
1024
    /// The current position is advanced by `nbytes`.
1025
    ///
1026
    /// # Examples
1027
    ///
1028
    /// ```
1029
    /// use bytes::BufMut;
1030
    ///
1031
    /// let mut buf = vec![];
1032
    /// buf.put_int(0x0504010203, 3);
1033
    /// assert_eq!(buf, b"\x01\x02\x03");
1034
    /// ```
1035
    ///
1036
    /// # Panics
1037
    ///
1038
    /// This function panics if there is not enough remaining capacity in
1039
    /// `self` or if `nbytes` is greater than 8.
1040
    #[inline]
1041
0
    fn put_int(&mut self, n: i64, nbytes: usize) {
1042
0
        let start = match mem::size_of_val(&n).checked_sub(nbytes) {
1043
0
            Some(start) => start,
1044
0
            None => panic_does_not_fit(nbytes, mem::size_of_val(&n)),
1045
        };
1046
1047
0
        self.put_slice(&n.to_be_bytes()[start..]);
1048
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_int
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_int
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_int
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_int
1049
1050
    /// Writes low `nbytes` of a signed integer to `self` in little-endian byte order.
1051
    ///
1052
    /// The current position is advanced by `nbytes`.
1053
    ///
1054
    /// # Examples
1055
    ///
1056
    /// ```
1057
    /// use bytes::BufMut;
1058
    ///
1059
    /// let mut buf = vec![];
1060
    /// buf.put_int_le(0x0504010203, 3);
1061
    /// assert_eq!(buf, b"\x03\x02\x01");
1062
    /// ```
1063
    ///
1064
    /// # Panics
1065
    ///
1066
    /// This function panics if there is not enough remaining capacity in
1067
    /// `self` or if `nbytes` is greater than 8.
1068
    #[inline]
1069
0
    fn put_int_le(&mut self, n: i64, nbytes: usize) {
1070
0
        let slice = n.to_le_bytes();
1071
0
        let slice = match slice.get(..nbytes) {
1072
0
            Some(slice) => slice,
1073
0
            None => panic_does_not_fit(nbytes, slice.len()),
1074
        };
1075
1076
0
        self.put_slice(slice);
1077
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_int_le
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_int_le
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_int_le
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_int_le
1078
1079
    /// Writes low `nbytes` of a signed integer to `self` in native-endian byte order.
1080
    ///
1081
    /// The current position is advanced by `nbytes`.
1082
    ///
1083
    /// # Examples
1084
    ///
1085
    /// ```
1086
    /// use bytes::BufMut;
1087
    ///
1088
    /// let mut buf = vec![];
1089
    /// buf.put_int_ne(0x010203, 3);
1090
    /// if cfg!(target_endian = "big") {
1091
    ///     assert_eq!(buf, b"\x01\x02\x03");
1092
    /// } else {
1093
    ///     assert_eq!(buf, b"\x03\x02\x01");
1094
    /// }
1095
    /// ```
1096
    ///
1097
    /// # Panics
1098
    ///
1099
    /// This function panics if there is not enough remaining capacity in
1100
    /// `self` or if `nbytes` is greater than 8.
1101
    #[inline]
1102
0
    fn put_int_ne(&mut self, n: i64, nbytes: usize) {
1103
0
        if cfg!(target_endian = "big") {
1104
0
            self.put_int(n, nbytes)
1105
        } else {
1106
0
            self.put_int_le(n, nbytes)
1107
        }
1108
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_int_ne
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_int_ne
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_int_ne
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_int_ne
1109
1110
    /// Writes  an IEEE754 single-precision (4 bytes) floating point number to
1111
    /// `self` in big-endian byte order.
1112
    ///
1113
    /// The current position is advanced by 4.
1114
    ///
1115
    /// # Examples
1116
    ///
1117
    /// ```
1118
    /// use bytes::BufMut;
1119
    ///
1120
    /// let mut buf = vec![];
1121
    /// buf.put_f32(1.2f32);
1122
    /// assert_eq!(buf, b"\x3F\x99\x99\x9A");
1123
    /// ```
1124
    ///
1125
    /// # Panics
1126
    ///
1127
    /// This function panics if there is not enough remaining capacity in
1128
    /// `self`.
1129
    #[inline]
1130
0
    fn put_f32(&mut self, n: f32) {
1131
0
        self.put_u32(n.to_bits());
1132
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_f32
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_f32
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_f32
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_f32
1133
1134
    /// Writes  an IEEE754 single-precision (4 bytes) floating point number to
1135
    /// `self` in little-endian byte order.
1136
    ///
1137
    /// The current position is advanced by 4.
1138
    ///
1139
    /// # Examples
1140
    ///
1141
    /// ```
1142
    /// use bytes::BufMut;
1143
    ///
1144
    /// let mut buf = vec![];
1145
    /// buf.put_f32_le(1.2f32);
1146
    /// assert_eq!(buf, b"\x9A\x99\x99\x3F");
1147
    /// ```
1148
    ///
1149
    /// # Panics
1150
    ///
1151
    /// This function panics if there is not enough remaining capacity in
1152
    /// `self`.
1153
    #[inline]
1154
0
    fn put_f32_le(&mut self, n: f32) {
1155
0
        self.put_u32_le(n.to_bits());
1156
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_f32_le
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_f32_le
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_f32_le
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_f32_le
1157
1158
    /// Writes an IEEE754 single-precision (4 bytes) floating point number to
1159
    /// `self` in native-endian byte order.
1160
    ///
1161
    /// The current position is advanced by 4.
1162
    ///
1163
    /// # Examples
1164
    ///
1165
    /// ```
1166
    /// use bytes::BufMut;
1167
    ///
1168
    /// let mut buf = vec![];
1169
    /// buf.put_f32_ne(1.2f32);
1170
    /// if cfg!(target_endian = "big") {
1171
    ///     assert_eq!(buf, b"\x3F\x99\x99\x9A");
1172
    /// } else {
1173
    ///     assert_eq!(buf, b"\x9A\x99\x99\x3F");
1174
    /// }
1175
    /// ```
1176
    ///
1177
    /// # Panics
1178
    ///
1179
    /// This function panics if there is not enough remaining capacity in
1180
    /// `self`.
1181
    #[inline]
1182
0
    fn put_f32_ne(&mut self, n: f32) {
1183
0
        self.put_u32_ne(n.to_bits());
1184
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_f32_ne
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_f32_ne
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_f32_ne
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_f32_ne
1185
1186
    /// Writes  an IEEE754 double-precision (8 bytes) floating point number to
1187
    /// `self` in big-endian byte order.
1188
    ///
1189
    /// The current position is advanced by 8.
1190
    ///
1191
    /// # Examples
1192
    ///
1193
    /// ```
1194
    /// use bytes::BufMut;
1195
    ///
1196
    /// let mut buf = vec![];
1197
    /// buf.put_f64(1.2f64);
1198
    /// assert_eq!(buf, b"\x3F\xF3\x33\x33\x33\x33\x33\x33");
1199
    /// ```
1200
    ///
1201
    /// # Panics
1202
    ///
1203
    /// This function panics if there is not enough remaining capacity in
1204
    /// `self`.
1205
    #[inline]
1206
0
    fn put_f64(&mut self, n: f64) {
1207
0
        self.put_u64(n.to_bits());
1208
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_f64
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_f64
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_f64
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_f64
1209
1210
    /// Writes  an IEEE754 double-precision (8 bytes) floating point number to
1211
    /// `self` in little-endian byte order.
1212
    ///
1213
    /// The current position is advanced by 8.
1214
    ///
1215
    /// # Examples
1216
    ///
1217
    /// ```
1218
    /// use bytes::BufMut;
1219
    ///
1220
    /// let mut buf = vec![];
1221
    /// buf.put_f64_le(1.2f64);
1222
    /// assert_eq!(buf, b"\x33\x33\x33\x33\x33\x33\xF3\x3F");
1223
    /// ```
1224
    ///
1225
    /// # Panics
1226
    ///
1227
    /// This function panics if there is not enough remaining capacity in
1228
    /// `self`.
1229
    #[inline]
1230
0
    fn put_f64_le(&mut self, n: f64) {
1231
0
        self.put_u64_le(n.to_bits());
1232
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_f64_le
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_f64_le
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_f64_le
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_f64_le
1233
1234
    /// Writes  an IEEE754 double-precision (8 bytes) floating point number to
1235
    /// `self` in native-endian byte order.
1236
    ///
1237
    /// The current position is advanced by 8.
1238
    ///
1239
    /// # Examples
1240
    ///
1241
    /// ```
1242
    /// use bytes::BufMut;
1243
    ///
1244
    /// let mut buf = vec![];
1245
    /// buf.put_f64_ne(1.2f64);
1246
    /// if cfg!(target_endian = "big") {
1247
    ///     assert_eq!(buf, b"\x3F\xF3\x33\x33\x33\x33\x33\x33");
1248
    /// } else {
1249
    ///     assert_eq!(buf, b"\x33\x33\x33\x33\x33\x33\xF3\x3F");
1250
    /// }
1251
    /// ```
1252
    ///
1253
    /// # Panics
1254
    ///
1255
    /// This function panics if there is not enough remaining capacity in
1256
    /// `self`.
1257
    #[inline]
1258
0
    fn put_f64_ne(&mut self, n: f64) {
1259
0
        self.put_u64_ne(n.to_bits());
1260
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put_f64_ne
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_f64_ne
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::put_f64_ne
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::put_f64_ne
1261
1262
    /// Creates an adaptor which can write at most `limit` bytes to `self`.
1263
    ///
1264
    /// # Examples
1265
    ///
1266
    /// ```
1267
    /// use bytes::BufMut;
1268
    ///
1269
    /// let arr = &mut [0u8; 128][..];
1270
    /// assert_eq!(arr.remaining_mut(), 128);
1271
    ///
1272
    /// let dst = arr.limit(10);
1273
    /// assert_eq!(dst.remaining_mut(), 10);
1274
    /// ```
1275
    #[inline]
1276
0
    fn limit(self, limit: usize) -> Limit<Self>
1277
0
    where
1278
0
        Self: Sized,
1279
0
    {
1280
0
        limit::new(self, limit)
1281
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::limit
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::limit
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::limit
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::limit
1282
1283
    /// Creates an adaptor which implements the `Write` trait for `self`.
1284
    ///
1285
    /// This function returns a new value which implements `Write` by adapting
1286
    /// the `Write` trait functions to the `BufMut` trait functions. Given that
1287
    /// `BufMut` operations are infallible, none of the `Write` functions will
1288
    /// return with `Err`.
1289
    ///
1290
    /// # Examples
1291
    ///
1292
    /// ```
1293
    /// use bytes::BufMut;
1294
    /// use std::io::Write;
1295
    ///
1296
    /// let mut buf = vec![].writer();
1297
    ///
1298
    /// let num = buf.write(&b"hello world"[..]).unwrap();
1299
    /// assert_eq!(11, num);
1300
    ///
1301
    /// let buf = buf.into_inner();
1302
    ///
1303
    /// assert_eq!(*buf, b"hello world"[..]);
1304
    /// ```
1305
    #[cfg(feature = "std")]
1306
    #[cfg_attr(docsrs, doc(cfg(feature = "std")))]
1307
    #[inline]
1308
0
    fn writer(self) -> Writer<Self>
1309
0
    where
1310
0
        Self: Sized,
1311
0
    {
1312
0
        writer::new(self)
1313
0
    }
Unexecuted instantiation: <alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::writer
Unexecuted instantiation: <bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::writer
Unexecuted instantiation: <&mut [core::mem::maybe_uninit::MaybeUninit<u8>] as bytes::buf::buf_mut::BufMut>::writer
Unexecuted instantiation: <&mut [u8] as bytes::buf::buf_mut::BufMut>::writer
1314
1315
    /// Creates an adapter which will chain this buffer with another.
1316
    ///
1317
    /// The returned `BufMut` instance will first write to all bytes from
1318
    /// `self`. Afterwards, it will write to `next`.
1319
    ///
1320
    /// # Examples
1321
    ///
1322
    /// ```
1323
    /// use bytes::BufMut;
1324
    ///
1325
    /// let mut a = [0u8; 5];
1326
    /// let mut b = [0u8; 6];
1327
    ///
1328
    /// let mut chain = (&mut a[..]).chain_mut(&mut b[..]);
1329
    ///
1330
    /// chain.put_slice(b"hello world");
1331
    ///
1332
    /// assert_eq!(&a[..], b"hello");
1333
    /// assert_eq!(&b[..], b" world");
1334
    /// ```
1335
    #[inline]
1336
0
    fn chain_mut<U: BufMut>(self, next: U) -> Chain<Self, U>
1337
0
    where
1338
0
        Self: Sized,
1339
0
    {
1340
0
        Chain::new(self, next)
1341
0
    }
1342
}
1343
1344
macro_rules! deref_forward_bufmut {
1345
    () => {
1346
        #[inline]
1347
0
        fn remaining_mut(&self) -> usize {
1348
0
            (**self).remaining_mut()
1349
0
        }
Unexecuted instantiation: <&mut bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::remaining_mut
Unexecuted instantiation: <alloc::boxed::Box<_> as bytes::buf::buf_mut::BufMut>::remaining_mut
1350
1351
        #[inline]
1352
0
        fn chunk_mut(&mut self) -> &mut UninitSlice {
1353
0
            (**self).chunk_mut()
1354
0
        }
Unexecuted instantiation: <&mut _ as bytes::buf::buf_mut::BufMut>::chunk_mut
Unexecuted instantiation: <alloc::boxed::Box<_> as bytes::buf::buf_mut::BufMut>::chunk_mut
1355
1356
        #[inline]
1357
0
        unsafe fn advance_mut(&mut self, cnt: usize) {
1358
0
            (**self).advance_mut(cnt)
1359
0
        }
Unexecuted instantiation: <&mut _ as bytes::buf::buf_mut::BufMut>::advance_mut
Unexecuted instantiation: <alloc::boxed::Box<_> as bytes::buf::buf_mut::BufMut>::advance_mut
1360
1361
        #[inline]
1362
0
        fn put_slice(&mut self, src: &[u8]) {
1363
0
            (**self).put_slice(src)
1364
0
        }
Unexecuted instantiation: <&mut _ as bytes::buf::buf_mut::BufMut>::put_slice
Unexecuted instantiation: <alloc::boxed::Box<_> as bytes::buf::buf_mut::BufMut>::put_slice
1365
1366
        #[inline]
1367
0
        fn put_u8(&mut self, n: u8) {
1368
0
            (**self).put_u8(n)
1369
0
        }
Unexecuted instantiation: <&mut _ as bytes::buf::buf_mut::BufMut>::put_u8
Unexecuted instantiation: <alloc::boxed::Box<_> as bytes::buf::buf_mut::BufMut>::put_u8
1370
1371
        #[inline]
1372
0
        fn put_i8(&mut self, n: i8) {
1373
0
            (**self).put_i8(n)
1374
0
        }
Unexecuted instantiation: <&mut _ as bytes::buf::buf_mut::BufMut>::put_i8
Unexecuted instantiation: <alloc::boxed::Box<_> as bytes::buf::buf_mut::BufMut>::put_i8
1375
1376
        #[inline]
1377
0
        fn put_u16(&mut self, n: u16) {
1378
0
            (**self).put_u16(n)
1379
0
        }
Unexecuted instantiation: <&mut _ as bytes::buf::buf_mut::BufMut>::put_u16
Unexecuted instantiation: <alloc::boxed::Box<_> as bytes::buf::buf_mut::BufMut>::put_u16
1380
1381
        #[inline]
1382
0
        fn put_u16_le(&mut self, n: u16) {
1383
0
            (**self).put_u16_le(n)
1384
0
        }
Unexecuted instantiation: <&mut _ as bytes::buf::buf_mut::BufMut>::put_u16_le
Unexecuted instantiation: <alloc::boxed::Box<_> as bytes::buf::buf_mut::BufMut>::put_u16_le
1385
1386
        #[inline]
1387
0
        fn put_u16_ne(&mut self, n: u16) {
1388
0
            (**self).put_u16_ne(n)
1389
0
        }
Unexecuted instantiation: <&mut _ as bytes::buf::buf_mut::BufMut>::put_u16_ne
Unexecuted instantiation: <alloc::boxed::Box<_> as bytes::buf::buf_mut::BufMut>::put_u16_ne
1390
1391
        #[inline]
1392
0
        fn put_i16(&mut self, n: i16) {
1393
0
            (**self).put_i16(n)
1394
0
        }
Unexecuted instantiation: <&mut _ as bytes::buf::buf_mut::BufMut>::put_i16
Unexecuted instantiation: <alloc::boxed::Box<_> as bytes::buf::buf_mut::BufMut>::put_i16
1395
1396
        #[inline]
1397
0
        fn put_i16_le(&mut self, n: i16) {
1398
0
            (**self).put_i16_le(n)
1399
0
        }
Unexecuted instantiation: <&mut _ as bytes::buf::buf_mut::BufMut>::put_i16_le
Unexecuted instantiation: <alloc::boxed::Box<_> as bytes::buf::buf_mut::BufMut>::put_i16_le
1400
1401
        #[inline]
1402
0
        fn put_i16_ne(&mut self, n: i16) {
1403
0
            (**self).put_i16_ne(n)
1404
0
        }
Unexecuted instantiation: <&mut _ as bytes::buf::buf_mut::BufMut>::put_i16_ne
Unexecuted instantiation: <alloc::boxed::Box<_> as bytes::buf::buf_mut::BufMut>::put_i16_ne
1405
1406
        #[inline]
1407
0
        fn put_u32(&mut self, n: u32) {
1408
0
            (**self).put_u32(n)
1409
0
        }
Unexecuted instantiation: <&mut _ as bytes::buf::buf_mut::BufMut>::put_u32
Unexecuted instantiation: <alloc::boxed::Box<_> as bytes::buf::buf_mut::BufMut>::put_u32
1410
1411
        #[inline]
1412
0
        fn put_u32_le(&mut self, n: u32) {
1413
0
            (**self).put_u32_le(n)
1414
0
        }
Unexecuted instantiation: <&mut _ as bytes::buf::buf_mut::BufMut>::put_u32_le
Unexecuted instantiation: <alloc::boxed::Box<_> as bytes::buf::buf_mut::BufMut>::put_u32_le
1415
1416
        #[inline]
1417
0
        fn put_u32_ne(&mut self, n: u32) {
1418
0
            (**self).put_u32_ne(n)
1419
0
        }
Unexecuted instantiation: <&mut _ as bytes::buf::buf_mut::BufMut>::put_u32_ne
Unexecuted instantiation: <alloc::boxed::Box<_> as bytes::buf::buf_mut::BufMut>::put_u32_ne
1420
1421
        #[inline]
1422
0
        fn put_i32(&mut self, n: i32) {
1423
0
            (**self).put_i32(n)
1424
0
        }
Unexecuted instantiation: <&mut _ as bytes::buf::buf_mut::BufMut>::put_i32
Unexecuted instantiation: <alloc::boxed::Box<_> as bytes::buf::buf_mut::BufMut>::put_i32
1425
1426
        #[inline]
1427
0
        fn put_i32_le(&mut self, n: i32) {
1428
0
            (**self).put_i32_le(n)
1429
0
        }
Unexecuted instantiation: <&mut _ as bytes::buf::buf_mut::BufMut>::put_i32_le
Unexecuted instantiation: <alloc::boxed::Box<_> as bytes::buf::buf_mut::BufMut>::put_i32_le
1430
1431
        #[inline]
1432
0
        fn put_i32_ne(&mut self, n: i32) {
1433
0
            (**self).put_i32_ne(n)
1434
0
        }
Unexecuted instantiation: <&mut _ as bytes::buf::buf_mut::BufMut>::put_i32_ne
Unexecuted instantiation: <alloc::boxed::Box<_> as bytes::buf::buf_mut::BufMut>::put_i32_ne
1435
1436
        #[inline]
1437
0
        fn put_u64(&mut self, n: u64) {
1438
0
            (**self).put_u64(n)
1439
0
        }
Unexecuted instantiation: <&mut _ as bytes::buf::buf_mut::BufMut>::put_u64
Unexecuted instantiation: <alloc::boxed::Box<_> as bytes::buf::buf_mut::BufMut>::put_u64
1440
1441
        #[inline]
1442
0
        fn put_u64_le(&mut self, n: u64) {
1443
0
            (**self).put_u64_le(n)
1444
0
        }
Unexecuted instantiation: <&mut _ as bytes::buf::buf_mut::BufMut>::put_u64_le
Unexecuted instantiation: <alloc::boxed::Box<_> as bytes::buf::buf_mut::BufMut>::put_u64_le
1445
1446
        #[inline]
1447
0
        fn put_u64_ne(&mut self, n: u64) {
1448
0
            (**self).put_u64_ne(n)
1449
0
        }
Unexecuted instantiation: <&mut _ as bytes::buf::buf_mut::BufMut>::put_u64_ne
Unexecuted instantiation: <alloc::boxed::Box<_> as bytes::buf::buf_mut::BufMut>::put_u64_ne
1450
1451
        #[inline]
1452
0
        fn put_i64(&mut self, n: i64) {
1453
0
            (**self).put_i64(n)
1454
0
        }
Unexecuted instantiation: <&mut _ as bytes::buf::buf_mut::BufMut>::put_i64
Unexecuted instantiation: <alloc::boxed::Box<_> as bytes::buf::buf_mut::BufMut>::put_i64
1455
1456
        #[inline]
1457
0
        fn put_i64_le(&mut self, n: i64) {
1458
0
            (**self).put_i64_le(n)
1459
0
        }
Unexecuted instantiation: <&mut _ as bytes::buf::buf_mut::BufMut>::put_i64_le
Unexecuted instantiation: <alloc::boxed::Box<_> as bytes::buf::buf_mut::BufMut>::put_i64_le
1460
1461
        #[inline]
1462
0
        fn put_i64_ne(&mut self, n: i64) {
1463
0
            (**self).put_i64_ne(n)
1464
0
        }
Unexecuted instantiation: <&mut _ as bytes::buf::buf_mut::BufMut>::put_i64_ne
Unexecuted instantiation: <alloc::boxed::Box<_> as bytes::buf::buf_mut::BufMut>::put_i64_ne
1465
    };
1466
}
1467
1468
unsafe impl<T: BufMut + ?Sized> BufMut for &mut T {
1469
    deref_forward_bufmut!();
1470
}
1471
1472
unsafe impl<T: BufMut + ?Sized> BufMut for Box<T> {
1473
    deref_forward_bufmut!();
1474
}
1475
1476
unsafe impl BufMut for &mut [u8] {
1477
    #[inline]
1478
0
    fn remaining_mut(&self) -> usize {
1479
0
        self.len()
1480
0
    }
1481
1482
    #[inline]
1483
0
    fn chunk_mut(&mut self) -> &mut UninitSlice {
1484
0
        UninitSlice::new(self)
1485
0
    }
1486
1487
    #[inline]
1488
0
    unsafe fn advance_mut(&mut self, cnt: usize) {
1489
0
        if self.len() < cnt {
1490
0
            panic_advance(cnt, self.len());
1491
0
        }
1492
0
1493
0
        // Lifetime dance taken from `impl Write for &mut [u8]`.
1494
0
        let (_, b) = core::mem::replace(self, &mut []).split_at_mut(cnt);
1495
0
        *self = b;
1496
0
    }
1497
1498
    #[inline]
1499
0
    fn put_slice(&mut self, src: &[u8]) {
1500
0
        if self.len() < src.len() {
1501
0
            panic_advance(src.len(), self.len());
1502
0
        }
1503
0
1504
0
        self[..src.len()].copy_from_slice(src);
1505
0
        // SAFETY: We just initialized `src.len()` bytes.
1506
0
        unsafe { self.advance_mut(src.len()) };
1507
0
    }
1508
1509
    #[inline]
1510
0
    fn put_bytes(&mut self, val: u8, cnt: usize) {
1511
0
        if self.len() < cnt {
1512
0
            panic_advance(cnt, self.len());
1513
0
        }
1514
0
1515
0
        // SAFETY: We just checked that the pointer is valid for `cnt` bytes.
1516
0
        unsafe {
1517
0
            ptr::write_bytes(self.as_mut_ptr(), val, cnt);
1518
0
            self.advance_mut(cnt);
1519
0
        }
1520
0
    }
1521
}
1522
1523
unsafe impl BufMut for &mut [core::mem::MaybeUninit<u8>] {
1524
    #[inline]
1525
0
    fn remaining_mut(&self) -> usize {
1526
0
        self.len()
1527
0
    }
1528
1529
    #[inline]
1530
0
    fn chunk_mut(&mut self) -> &mut UninitSlice {
1531
0
        UninitSlice::uninit(self)
1532
0
    }
1533
1534
    #[inline]
1535
0
    unsafe fn advance_mut(&mut self, cnt: usize) {
1536
0
        if self.len() < cnt {
1537
0
            panic_advance(cnt, self.len());
1538
0
        }
1539
0
1540
0
        // Lifetime dance taken from `impl Write for &mut [u8]`.
1541
0
        let (_, b) = core::mem::replace(self, &mut []).split_at_mut(cnt);
1542
0
        *self = b;
1543
0
    }
1544
1545
    #[inline]
1546
0
    fn put_slice(&mut self, src: &[u8]) {
1547
0
        if self.len() < src.len() {
1548
0
            panic_advance(src.len(), self.len());
1549
0
        }
1550
0
1551
0
        // SAFETY: We just checked that the pointer is valid for `src.len()` bytes.
1552
0
        unsafe {
1553
0
            ptr::copy_nonoverlapping(src.as_ptr(), self.as_mut_ptr().cast(), src.len());
1554
0
            self.advance_mut(src.len());
1555
0
        }
1556
0
    }
1557
1558
    #[inline]
1559
0
    fn put_bytes(&mut self, val: u8, cnt: usize) {
1560
0
        if self.len() < cnt {
1561
0
            panic_advance(cnt, self.len());
1562
0
        }
1563
0
1564
0
        // SAFETY: We just checked that the pointer is valid for `cnt` bytes.
1565
0
        unsafe {
1566
0
            ptr::write_bytes(self.as_mut_ptr() as *mut u8, val, cnt);
1567
0
            self.advance_mut(cnt);
1568
0
        }
1569
0
    }
1570
}
1571
1572
unsafe impl BufMut for Vec<u8> {
1573
    #[inline]
1574
0
    fn remaining_mut(&self) -> usize {
1575
0
        // A vector can never have more than isize::MAX bytes
1576
0
        core::isize::MAX as usize - self.len()
1577
0
    }
1578
1579
    #[inline]
1580
0
    unsafe fn advance_mut(&mut self, cnt: usize) {
1581
0
        let len = self.len();
1582
0
        let remaining = self.capacity() - len;
1583
0
1584
0
        if remaining < cnt {
1585
0
            panic_advance(cnt, remaining);
1586
0
        }
1587
0
1588
0
        // Addition will not overflow since the sum is at most the capacity.
1589
0
        self.set_len(len + cnt);
1590
0
    }
1591
1592
    #[inline]
1593
0
    fn chunk_mut(&mut self) -> &mut UninitSlice {
1594
0
        if self.capacity() == self.len() {
1595
0
            self.reserve(64); // Grow the vec
1596
0
        }
1597
1598
0
        let cap = self.capacity();
1599
0
        let len = self.len();
1600
0
1601
0
        let ptr = self.as_mut_ptr();
1602
0
        // SAFETY: Since `ptr` is valid for `cap` bytes, `ptr.add(len)` must be
1603
0
        // valid for `cap - len` bytes. The subtraction will not underflow since
1604
0
        // `len <= cap`.
1605
0
        unsafe { UninitSlice::from_raw_parts_mut(ptr.add(len), cap - len) }
1606
0
    }
1607
1608
    // Specialize these methods so they can skip checking `remaining_mut`
1609
    // and `advance_mut`.
1610
    #[inline]
1611
0
    fn put<T: super::Buf>(&mut self, mut src: T)
1612
0
    where
1613
0
        Self: Sized,
1614
0
    {
1615
0
        // In case the src isn't contiguous, reserve upfront.
1616
0
        self.reserve(src.remaining());
1617
1618
0
        while src.has_remaining() {
1619
0
            let s = src.chunk();
1620
0
            let l = s.len();
1621
0
            self.extend_from_slice(s);
1622
0
            src.advance(l);
1623
0
        }
1624
0
    }
1625
1626
    #[inline]
1627
0
    fn put_slice(&mut self, src: &[u8]) {
1628
0
        self.extend_from_slice(src);
1629
0
    }
1630
1631
    #[inline]
1632
0
    fn put_bytes(&mut self, val: u8, cnt: usize) {
1633
0
        // If the addition overflows, then the `resize` will fail.
1634
0
        let new_len = self.len().saturating_add(cnt);
1635
0
        self.resize(new_len, val);
1636
0
    }
1637
}
1638
1639
// The existence of this function makes the compiler catch if the BufMut
1640
// trait is "object-safe" or not.
1641
0
fn _assert_trait_object(_b: &dyn BufMut) {}