1 use crate::io::util::chain::{chain, Chain};
2 use crate::io::util::read::{read, Read};
3 use crate::io::util::read_buf::{read_buf, ReadBuf};
4 use crate::io::util::read_exact::{read_exact, ReadExact};
5 use crate::io::util::read_int::{ReadF32, ReadF32Le, ReadF64, ReadF64Le};
6 use crate::io::util::read_int::{
7     ReadI128, ReadI128Le, ReadI16, ReadI16Le, ReadI32, ReadI32Le, ReadI64, ReadI64Le, ReadI8,
8 };
9 use crate::io::util::read_int::{
10     ReadU128, ReadU128Le, ReadU16, ReadU16Le, ReadU32, ReadU32Le, ReadU64, ReadU64Le, ReadU8,
11 };
12 use crate::io::util::read_to_end::{read_to_end, ReadToEnd};
13 use crate::io::util::read_to_string::{read_to_string, ReadToString};
14 use crate::io::util::take::{take, Take};
15 use crate::io::AsyncRead;
16 
17 use bytes::BufMut;
18 
19 cfg_io_util! {
20     /// Defines numeric reader
21     macro_rules! read_impl {
22         (
23             $(
24                 $(#[$outer:meta])*
25                 fn $name:ident(&mut self) -> $($fut:ident)*;
26             )*
27         ) => {
28             $(
29                 $(#[$outer])*
30                 fn $name(&mut self) -> $($fut)*<&mut Self> where Self: Unpin {
31                     $($fut)*::new(self)
32                 }
33             )*
34         }
35     }
36 
37     /// Reads bytes from a source.
38     ///
39     /// Implemented as an extension trait, adding utility methods to all
40     /// [`AsyncRead`] types. Callers will tend to import this trait instead of
41     /// [`AsyncRead`].
42     ///
43     /// ```no_run
44     /// use tokio::fs::File;
45     /// use tokio::io::{self, AsyncReadExt};
46     ///
47     /// #[tokio::main]
48     /// async fn main() -> io::Result<()> {
49     ///     let mut f = File::open("foo.txt").await?;
50     ///     let mut buffer = [0; 10];
51     ///
52     ///     // The `read` method is defined by this trait.
53     ///     let n = f.read(&mut buffer[..]).await?;
54     ///
55     ///     Ok(())
56     /// }
57     /// ```
58     ///
59     /// See [module][crate::io] documentation for more details.
60     ///
61     /// [`AsyncRead`]: AsyncRead
62     pub trait AsyncReadExt: AsyncRead {
63         /// Creates a new `AsyncRead` instance that chains this stream with
64         /// `next`.
65         ///
66         /// The returned `AsyncRead` instance will first read all bytes from this object
67         /// until EOF is encountered. Afterwards the output is equivalent to the
68         /// output of `next`.
69         ///
70         /// # Examples
71         ///
72         /// [`File`][crate::fs::File]s implement `AsyncRead`:
73         ///
74         /// ```no_run
75         /// use tokio::fs::File;
76         /// use tokio::io::{self, AsyncReadExt};
77         ///
78         /// #[tokio::main]
79         /// async fn main() -> io::Result<()> {
80         ///     let f1 = File::open("foo.txt").await?;
81         ///     let f2 = File::open("bar.txt").await?;
82         ///
83         ///     let mut handle = f1.chain(f2);
84         ///     let mut buffer = String::new();
85         ///
86         ///     // read the value into a String. We could use any AsyncRead
87         ///     // method here, this is just one example.
88         ///     handle.read_to_string(&mut buffer).await?;
89         ///     Ok(())
90         /// }
91         /// ```
92         fn chain<R>(self, next: R) -> Chain<Self, R>
93         where
94             Self: Sized,
95             R: AsyncRead,
96         {
97             chain(self, next)
98         }
99 
100         /// Pulls some bytes from this source into the specified buffer,
101         /// returning how many bytes were read.
102         ///
103         /// Equivalent to:
104         ///
105         /// ```ignore
106         /// async fn read(&mut self, buf: &mut [u8]) -> io::Result<usize>;
107         /// ```
108         ///
109         /// This method does not provide any guarantees about whether it
110         /// completes immediately or asynchronously.
111         ///
112         /// # Return
113         ///
114         /// If the return value of this method is `Ok(n)`, then it must be
115         /// guaranteed that `0 <= n <= buf.len()`. A nonzero `n` value indicates
116         /// that the buffer `buf` has been filled in with `n` bytes of data from
117         /// this source. If `n` is `0`, then it can indicate one of two
118         /// scenarios:
119         ///
120         /// 1. This reader has reached its "end of file" and will likely no longer
121         ///    be able to produce bytes. Note that this does not mean that the
122         ///    reader will *always* no longer be able to produce bytes.
123         /// 2. The buffer specified was 0 bytes in length.
124         ///
125         /// No guarantees are provided about the contents of `buf` when this
126         /// function is called, implementations cannot rely on any property of the
127         /// contents of `buf` being `true`. It is recommended that *implementations*
128         /// only write data to `buf` instead of reading its contents.
129         ///
130         /// Correspondingly, however, *callers* of this method may not assume
131         /// any guarantees about how the implementation uses `buf`. It is
132         /// possible that the code that's supposed to write to the buffer might
133         /// also read from it. It is your responsibility to make sure that `buf`
134         /// is initialized before calling `read`.
135         ///
136         /// # Errors
137         ///
138         /// If this function encounters any form of I/O or other error, an error
139         /// variant will be returned. If an error is returned then it must be
140         /// guaranteed that no bytes were read.
141         ///
142         /// # Cancel safety
143         ///
144         /// This method is cancel safe. If you use it as the event in a
145         /// [`tokio::select!`](crate::select) statement and some other branch
146         /// completes first, then it is guaranteed that no data was read.
147         ///
148         /// # Examples
149         ///
150         /// [`File`][crate::fs::File]s implement `Read`:
151         ///
152         /// ```no_run
153         /// use tokio::fs::File;
154         /// use tokio::io::{self, AsyncReadExt};
155         ///
156         /// #[tokio::main]
157         /// async fn main() -> io::Result<()> {
158         ///     let mut f = File::open("foo.txt").await?;
159         ///     let mut buffer = [0; 10];
160         ///
161         ///     // read up to 10 bytes
162         ///     let n = f.read(&mut buffer[..]).await?;
163         ///
164         ///     println!("The bytes: {:?}", &buffer[..n]);
165         ///     Ok(())
166         /// }
167         /// ```
168         fn read<'a>(&'a mut self, buf: &'a mut [u8]) -> Read<'a, Self>
169         where
170             Self: Unpin,
171         {
172             read(self, buf)
173         }
174 
175         /// Pulls some bytes from this source into the specified buffer,
176         /// advancing the buffer's internal cursor.
177         ///
178         /// Equivalent to:
179         ///
180         /// ```ignore
181         /// async fn read_buf<B: BufMut>(&mut self, buf: &mut B) -> io::Result<usize>;
182         /// ```
183         ///
184         /// Usually, only a single `read` syscall is issued, even if there is
185         /// more space in the supplied buffer.
186         ///
187         /// This method does not provide any guarantees about whether it
188         /// completes immediately or asynchronously.
189         ///
190         /// # Return
191         ///
192         /// A nonzero `n` value indicates that the buffer `buf` has been filled
193         /// in with `n` bytes of data from this source. If `n` is `0`, then it
194         /// can indicate one of two scenarios:
195         ///
196         /// 1. This reader has reached its "end of file" and will likely no longer
197         ///    be able to produce bytes. Note that this does not mean that the
198         ///    reader will *always* no longer be able to produce bytes.
199         /// 2. The buffer specified had a remaining capacity of zero.
200         ///
201         /// # Errors
202         ///
203         /// If this function encounters any form of I/O or other error, an error
204         /// variant will be returned. If an error is returned then it must be
205         /// guaranteed that no bytes were read.
206         ///
207         /// # Cancel safety
208         ///
209         /// This method is cancel safe. If you use it as the event in a
210         /// [`tokio::select!`](crate::select) statement and some other branch
211         /// completes first, then it is guaranteed that no data was read.
212         ///
213         /// # Examples
214         ///
215         /// [`File`] implements `Read` and [`BytesMut`] implements [`BufMut`]:
216         ///
217         /// [`File`]: crate::fs::File
218         /// [`BytesMut`]: bytes::BytesMut
219         /// [`BufMut`]: bytes::BufMut
220         ///
221         /// ```no_run
222         /// use tokio::fs::File;
223         /// use tokio::io::{self, AsyncReadExt};
224         ///
225         /// use bytes::BytesMut;
226         ///
227         /// #[tokio::main]
228         /// async fn main() -> io::Result<()> {
229         ///     let mut f = File::open("foo.txt").await?;
230         ///     let mut buffer = BytesMut::with_capacity(10);
231         ///
232         ///     assert!(buffer.is_empty());
233         ///     assert!(buffer.capacity() >= 10);
234         ///
235         ///     // note that the return value is not needed to access the data
236         ///     // that was read as `buffer`'s internal cursor is updated.
237         ///     //
238         ///     // this might read more than 10 bytes if the capacity of `buffer`
239         ///     // is larger than 10.
240         ///     f.read_buf(&mut buffer).await?;
241         ///
242         ///     println!("The bytes: {:?}", &buffer[..]);
243         ///     Ok(())
244         /// }
245         /// ```
246         fn read_buf<'a, B>(&'a mut self, buf: &'a mut B) -> ReadBuf<'a, Self, B>
247         where
248             Self: Unpin,
249             B: BufMut + ?Sized,
250         {
251             read_buf(self, buf)
252         }
253 
254         /// Reads the exact number of bytes required to fill `buf`.
255         ///
256         /// Equivalent to:
257         ///
258         /// ```ignore
259         /// async fn read_exact(&mut self, buf: &mut [u8]) -> io::Result<usize>;
260         /// ```
261         ///
262         /// This function reads as many bytes as necessary to completely fill
263         /// the specified buffer `buf`.
264         ///
265         /// # Errors
266         ///
267         /// If the operation encounters an "end of file" before completely
268         /// filling the buffer, it returns an error of the kind
269         /// [`ErrorKind::UnexpectedEof`]. The contents of `buf` are unspecified
270         /// in this case.
271         ///
272         /// If any other read error is encountered then the operation
273         /// immediately returns. The contents of `buf` are unspecified in this
274         /// case.
275         ///
276         /// If this operation returns an error, it is unspecified how many bytes
277         /// it has read, but it will never read more than would be necessary to
278         /// completely fill the buffer.
279         ///
280         /// # Cancel safety
281         ///
282         /// This method is not cancellation safe. If the method is used as the
283         /// event in a [`tokio::select!`](crate::select) statement and some
284         /// other branch completes first, then some data may already have been
285         /// read into `buf`.
286         ///
287         /// # Examples
288         ///
289         /// [`File`][crate::fs::File]s implement `Read`:
290         ///
291         /// ```no_run
292         /// use tokio::fs::File;
293         /// use tokio::io::{self, AsyncReadExt};
294         ///
295         /// #[tokio::main]
296         /// async fn main() -> io::Result<()> {
297         ///     let mut f = File::open("foo.txt").await?;
298         ///     let len = 10;
299         ///     let mut buffer = vec![0; len];
300         ///
301         ///     // read exactly 10 bytes
302         ///     f.read_exact(&mut buffer).await?;
303         ///     Ok(())
304         /// }
305         /// ```
306         ///
307         /// [`ErrorKind::UnexpectedEof`]: std::io::ErrorKind::UnexpectedEof
308         fn read_exact<'a>(&'a mut self, buf: &'a mut [u8]) -> ReadExact<'a, Self>
309         where
310             Self: Unpin,
311         {
312             read_exact(self, buf)
313         }
314 
315         read_impl! {
316             /// Reads an unsigned 8 bit integer from the underlying reader.
317             ///
318             /// Equivalent to:
319             ///
320             /// ```ignore
321             /// async fn read_u8(&mut self) -> io::Result<u8>;
322             /// ```
323             ///
324             /// It is recommended to use a buffered reader to avoid excessive
325             /// syscalls.
326             ///
327             /// # Errors
328             ///
329             /// This method returns the same errors as [`AsyncReadExt::read_exact`].
330             ///
331             /// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
332             ///
333             /// # Cancel safety
334             ///
335             /// This method is cancel safe. If this method is used as an event in a
336             /// [`tokio::select!`](crate::select) statement and some other branch
337             /// completes first, it is guaranteed that no data were read.
338             ///
339             /// # Examples
340             ///
341             /// Read unsigned 8 bit integers from an `AsyncRead`:
342             ///
343             /// ```rust
344             /// use tokio::io::{self, AsyncReadExt};
345             ///
346             /// use std::io::Cursor;
347             ///
348             /// #[tokio::main]
349             /// async fn main() -> io::Result<()> {
350             ///     let mut reader = Cursor::new(vec![2, 5]);
351             ///
352             ///     assert_eq!(2, reader.read_u8().await?);
353             ///     assert_eq!(5, reader.read_u8().await?);
354             ///
355             ///     Ok(())
356             /// }
357             /// ```
358             fn read_u8(&mut self) -> ReadU8;
359 
360             /// Reads a signed 8 bit integer from the underlying reader.
361             ///
362             /// Equivalent to:
363             ///
364             /// ```ignore
365             /// async fn read_i8(&mut self) -> io::Result<i8>;
366             /// ```
367             ///
368             /// It is recommended to use a buffered reader to avoid excessive
369             /// syscalls.
370             ///
371             /// # Errors
372             ///
373             /// This method returns the same errors as [`AsyncReadExt::read_exact`].
374             ///
375             /// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
376             ///
377             /// # Cancel safety
378             ///
379             /// This method is cancel safe. If this method is used as an event in a
380             /// [`tokio::select!`](crate::select) statement and some other branch
381             /// completes first, it is guaranteed that no data were read.
382             ///
383             /// # Examples
384             ///
385             /// Read unsigned 8 bit integers from an `AsyncRead`:
386             ///
387             /// ```rust
388             /// use tokio::io::{self, AsyncReadExt};
389             ///
390             /// use std::io::Cursor;
391             ///
392             /// #[tokio::main]
393             /// async fn main() -> io::Result<()> {
394             ///     let mut reader = Cursor::new(vec![0x02, 0xfb]);
395             ///
396             ///     assert_eq!(2, reader.read_i8().await?);
397             ///     assert_eq!(-5, reader.read_i8().await?);
398             ///
399             ///     Ok(())
400             /// }
401             /// ```
402             fn read_i8(&mut self) -> ReadI8;
403 
404             /// Reads an unsigned 16-bit integer in big-endian order from the
405             /// underlying reader.
406             ///
407             /// Equivalent to:
408             ///
409             /// ```ignore
410             /// async fn read_u16(&mut self) -> io::Result<u16>;
411             /// ```
412             ///
413             /// It is recommended to use a buffered reader to avoid excessive
414             /// syscalls.
415             ///
416             /// # Errors
417             ///
418             /// This method returns the same errors as [`AsyncReadExt::read_exact`].
419             ///
420             /// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
421             ///
422             /// # Cancel safety
423             ///
424             /// This method is not cancellation safe. If the method is used as the
425             /// event in a [`tokio::select!`](crate::select) statement and some
426             /// other branch completes first, then some data may be lost.
427             ///
428             /// # Examples
429             ///
430             /// Read unsigned 16 bit big-endian integers from a `AsyncRead`:
431             ///
432             /// ```rust
433             /// use tokio::io::{self, AsyncReadExt};
434             ///
435             /// use std::io::Cursor;
436             ///
437             /// #[tokio::main]
438             /// async fn main() -> io::Result<()> {
439             ///     let mut reader = Cursor::new(vec![2, 5, 3, 0]);
440             ///
441             ///     assert_eq!(517, reader.read_u16().await?);
442             ///     assert_eq!(768, reader.read_u16().await?);
443             ///     Ok(())
444             /// }
445             /// ```
446             fn read_u16(&mut self) -> ReadU16;
447 
448             /// Reads a signed 16-bit integer in big-endian order from the
449             /// underlying reader.
450             ///
451             /// Equivalent to:
452             ///
453             /// ```ignore
454             /// async fn read_i16(&mut self) -> io::Result<i16>;
455             /// ```
456             ///
457             /// It is recommended to use a buffered reader to avoid excessive
458             /// syscalls.
459             ///
460             /// # Errors
461             ///
462             /// This method returns the same errors as [`AsyncReadExt::read_exact`].
463             ///
464             /// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
465             ///
466             /// # Cancel safety
467             ///
468             /// This method is not cancellation safe. If the method is used as the
469             /// event in a [`tokio::select!`](crate::select) statement and some
470             /// other branch completes first, then some data may be lost.
471             ///
472             /// # Examples
473             ///
474             /// Read signed 16 bit big-endian integers from a `AsyncRead`:
475             ///
476             /// ```rust
477             /// use tokio::io::{self, AsyncReadExt};
478             ///
479             /// use std::io::Cursor;
480             ///
481             /// #[tokio::main]
482             /// async fn main() -> io::Result<()> {
483             ///     let mut reader = Cursor::new(vec![0x00, 0xc1, 0xff, 0x7c]);
484             ///
485             ///     assert_eq!(193, reader.read_i16().await?);
486             ///     assert_eq!(-132, reader.read_i16().await?);
487             ///     Ok(())
488             /// }
489             /// ```
490             fn read_i16(&mut self) -> ReadI16;
491 
492             /// Reads an unsigned 32-bit integer in big-endian order from the
493             /// underlying reader.
494             ///
495             /// Equivalent to:
496             ///
497             /// ```ignore
498             /// async fn read_u32(&mut self) -> io::Result<u32>;
499             /// ```
500             ///
501             /// It is recommended to use a buffered reader to avoid excessive
502             /// syscalls.
503             ///
504             /// # Errors
505             ///
506             /// This method returns the same errors as [`AsyncReadExt::read_exact`].
507             ///
508             /// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
509             ///
510             /// # Cancel safety
511             ///
512             /// This method is not cancellation safe. If the method is used as the
513             /// event in a [`tokio::select!`](crate::select) statement and some
514             /// other branch completes first, then some data may be lost.
515             ///
516             /// # Examples
517             ///
518             /// Read unsigned 32-bit big-endian integers from a `AsyncRead`:
519             ///
520             /// ```rust
521             /// use tokio::io::{self, AsyncReadExt};
522             ///
523             /// use std::io::Cursor;
524             ///
525             /// #[tokio::main]
526             /// async fn main() -> io::Result<()> {
527             ///     let mut reader = Cursor::new(vec![0x00, 0x00, 0x01, 0x0b]);
528             ///
529             ///     assert_eq!(267, reader.read_u32().await?);
530             ///     Ok(())
531             /// }
532             /// ```
533             fn read_u32(&mut self) -> ReadU32;
534 
535             /// Reads a signed 32-bit integer in big-endian order from the
536             /// underlying reader.
537             ///
538             ///
539             /// Equivalent to:
540             ///
541             /// ```ignore
542             /// async fn read_i32(&mut self) -> io::Result<i32>;
543             /// ```
544             ///
545             /// It is recommended to use a buffered reader to avoid excessive
546             /// syscalls.
547             ///
548             /// # Errors
549             ///
550             /// This method returns the same errors as [`AsyncReadExt::read_exact`].
551             ///
552             /// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
553             ///
554             /// # Cancel safety
555             ///
556             /// This method is not cancellation safe. If the method is used as the
557             /// event in a [`tokio::select!`](crate::select) statement and some
558             /// other branch completes first, then some data may be lost.
559             ///
560             /// # Examples
561             ///
562             /// Read signed 32-bit big-endian integers from a `AsyncRead`:
563             ///
564             /// ```rust
565             /// use tokio::io::{self, AsyncReadExt};
566             ///
567             /// use std::io::Cursor;
568             ///
569             /// #[tokio::main]
570             /// async fn main() -> io::Result<()> {
571             ///     let mut reader = Cursor::new(vec![0xff, 0xff, 0x7a, 0x33]);
572             ///
573             ///     assert_eq!(-34253, reader.read_i32().await?);
574             ///     Ok(())
575             /// }
576             /// ```
577             fn read_i32(&mut self) -> ReadI32;
578 
579             /// Reads an unsigned 64-bit integer in big-endian order from the
580             /// underlying reader.
581             ///
582             /// Equivalent to:
583             ///
584             /// ```ignore
585             /// async fn read_u64(&mut self) -> io::Result<u64>;
586             /// ```
587             ///
588             /// It is recommended to use a buffered reader to avoid excessive
589             /// syscalls.
590             ///
591             /// # Errors
592             ///
593             /// This method returns the same errors as [`AsyncReadExt::read_exact`].
594             ///
595             /// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
596             ///
597             /// # Cancel safety
598             ///
599             /// This method is not cancellation safe. If the method is used as the
600             /// event in a [`tokio::select!`](crate::select) statement and some
601             /// other branch completes first, then some data may be lost.
602             ///
603             /// # Examples
604             ///
605             /// Read unsigned 64-bit big-endian integers from a `AsyncRead`:
606             ///
607             /// ```rust
608             /// use tokio::io::{self, AsyncReadExt};
609             ///
610             /// use std::io::Cursor;
611             ///
612             /// #[tokio::main]
613             /// async fn main() -> io::Result<()> {
614             ///     let mut reader = Cursor::new(vec![
615             ///         0x00, 0x03, 0x43, 0x95, 0x4d, 0x60, 0x86, 0x83
616             ///     ]);
617             ///
618             ///     assert_eq!(918733457491587, reader.read_u64().await?);
619             ///     Ok(())
620             /// }
621             /// ```
622             fn read_u64(&mut self) -> ReadU64;
623 
624             /// Reads an signed 64-bit integer in big-endian order from the
625             /// underlying reader.
626             ///
627             /// Equivalent to:
628             ///
629             /// ```ignore
630             /// async fn read_i64(&mut self) -> io::Result<i64>;
631             /// ```
632             ///
633             /// It is recommended to use a buffered reader to avoid excessive
634             /// syscalls.
635             ///
636             /// # Errors
637             ///
638             /// This method returns the same errors as [`AsyncReadExt::read_exact`].
639             ///
640             /// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
641             ///
642             /// # Cancel safety
643             ///
644             /// This method is not cancellation safe. If the method is used as the
645             /// event in a [`tokio::select!`](crate::select) statement and some
646             /// other branch completes first, then some data may be lost.
647             ///
648             /// # Examples
649             ///
650             /// Read signed 64-bit big-endian integers from a `AsyncRead`:
651             ///
652             /// ```rust
653             /// use tokio::io::{self, AsyncReadExt};
654             ///
655             /// use std::io::Cursor;
656             ///
657             /// #[tokio::main]
658             /// async fn main() -> io::Result<()> {
659             ///     let mut reader = Cursor::new(vec![0x80, 0, 0, 0, 0, 0, 0, 0]);
660             ///
661             ///     assert_eq!(i64::MIN, reader.read_i64().await?);
662             ///     Ok(())
663             /// }
664             /// ```
665             fn read_i64(&mut self) -> ReadI64;
666 
667             /// Reads an unsigned 128-bit integer in big-endian order from the
668             /// underlying reader.
669             ///
670             /// Equivalent to:
671             ///
672             /// ```ignore
673             /// async fn read_u128(&mut self) -> io::Result<u128>;
674             /// ```
675             ///
676             /// It is recommended to use a buffered reader to avoid excessive
677             /// syscalls.
678             ///
679             /// # Errors
680             ///
681             /// This method returns the same errors as [`AsyncReadExt::read_exact`].
682             ///
683             /// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
684             ///
685             /// # Cancel safety
686             ///
687             /// This method is not cancellation safe. If the method is used as the
688             /// event in a [`tokio::select!`](crate::select) statement and some
689             /// other branch completes first, then some data may be lost.
690             ///
691             /// # Examples
692             ///
693             /// Read unsigned 128-bit big-endian integers from a `AsyncRead`:
694             ///
695             /// ```rust
696             /// use tokio::io::{self, AsyncReadExt};
697             ///
698             /// use std::io::Cursor;
699             ///
700             /// #[tokio::main]
701             /// async fn main() -> io::Result<()> {
702             ///     let mut reader = Cursor::new(vec![
703             ///         0x00, 0x03, 0x43, 0x95, 0x4d, 0x60, 0x86, 0x83,
704             ///         0x00, 0x03, 0x43, 0x95, 0x4d, 0x60, 0x86, 0x83
705             ///     ]);
706             ///
707             ///     assert_eq!(16947640962301618749969007319746179, reader.read_u128().await?);
708             ///     Ok(())
709             /// }
710             /// ```
711             fn read_u128(&mut self) -> ReadU128;
712 
713             /// Reads an signed 128-bit integer in big-endian order from the
714             /// underlying reader.
715             ///
716             /// Equivalent to:
717             ///
718             /// ```ignore
719             /// async fn read_i128(&mut self) -> io::Result<i128>;
720             /// ```
721             ///
722             /// It is recommended to use a buffered reader to avoid excessive
723             /// syscalls.
724             ///
725             /// # Errors
726             ///
727             /// This method returns the same errors as [`AsyncReadExt::read_exact`].
728             ///
729             /// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
730             ///
731             /// # Cancel safety
732             ///
733             /// This method is not cancellation safe. If the method is used as the
734             /// event in a [`tokio::select!`](crate::select) statement and some
735             /// other branch completes first, then some data may be lost.
736             ///
737             /// # Examples
738             ///
739             /// Read signed 128-bit big-endian integers from a `AsyncRead`:
740             ///
741             /// ```rust
742             /// use tokio::io::{self, AsyncReadExt};
743             ///
744             /// use std::io::Cursor;
745             ///
746             /// #[tokio::main]
747             /// async fn main() -> io::Result<()> {
748             ///     let mut reader = Cursor::new(vec![
749             ///         0x80, 0, 0, 0, 0, 0, 0, 0,
750             ///         0, 0, 0, 0, 0, 0, 0, 0
751             ///     ]);
752             ///
753             ///     assert_eq!(i128::MIN, reader.read_i128().await?);
754             ///     Ok(())
755             /// }
756             /// ```
757             fn read_i128(&mut self) -> ReadI128;
758 
759             /// Reads an 32-bit floating point type in big-endian order from the
760             /// underlying reader.
761             ///
762             /// Equivalent to:
763             ///
764             /// ```ignore
765             /// async fn read_f32(&mut self) -> io::Result<f32>;
766             /// ```
767             ///
768             /// It is recommended to use a buffered reader to avoid excessive
769             /// syscalls.
770             ///
771             /// # Errors
772             ///
773             /// This method returns the same errors as [`AsyncReadExt::read_exact`].
774             ///
775             /// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
776             ///
777             /// # Cancel safety
778             ///
779             /// This method is not cancellation safe. If the method is used as the
780             /// event in a [`tokio::select!`](crate::select) statement and some
781             /// other branch completes first, then some data may be lost.
782             ///
783             /// # Examples
784             ///
785             /// Read 32-bit floating point type from a `AsyncRead`:
786             ///
787             /// ```rust
788             /// use tokio::io::{self, AsyncReadExt};
789             ///
790             /// use std::io::Cursor;
791             ///
792             /// #[tokio::main]
793             /// async fn main() -> io::Result<()> {
794             ///     let mut reader = Cursor::new(vec![0xff, 0x7f, 0xff, 0xff]);
795             ///
796             ///     assert_eq!(f32::MIN, reader.read_f32().await?);
797             ///     Ok(())
798             /// }
799             /// ```
800             fn read_f32(&mut self) -> ReadF32;
801 
802             /// Reads an 64-bit floating point type in big-endian order from the
803             /// underlying reader.
804             ///
805             /// Equivalent to:
806             ///
807             /// ```ignore
808             /// async fn read_f64(&mut self) -> io::Result<f64>;
809             /// ```
810             ///
811             /// It is recommended to use a buffered reader to avoid excessive
812             /// syscalls.
813             ///
814             /// # Errors
815             ///
816             /// This method returns the same errors as [`AsyncReadExt::read_exact`].
817             ///
818             /// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
819             ///
820             /// # Cancel safety
821             ///
822             /// This method is not cancellation safe. If the method is used as the
823             /// event in a [`tokio::select!`](crate::select) statement and some
824             /// other branch completes first, then some data may be lost.
825             ///
826             /// # Examples
827             ///
828             /// Read 64-bit floating point type from a `AsyncRead`:
829             ///
830             /// ```rust
831             /// use tokio::io::{self, AsyncReadExt};
832             ///
833             /// use std::io::Cursor;
834             ///
835             /// #[tokio::main]
836             /// async fn main() -> io::Result<()> {
837             ///     let mut reader = Cursor::new(vec![
838             ///         0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
839             ///     ]);
840             ///
841             ///     assert_eq!(f64::MIN, reader.read_f64().await?);
842             ///     Ok(())
843             /// }
844             /// ```
845             fn read_f64(&mut self) -> ReadF64;
846 
847             /// Reads an unsigned 16-bit integer in little-endian order from the
848             /// underlying reader.
849             ///
850             /// Equivalent to:
851             ///
852             /// ```ignore
853             /// async fn read_u16_le(&mut self) -> io::Result<u16>;
854             /// ```
855             ///
856             /// It is recommended to use a buffered reader to avoid excessive
857             /// syscalls.
858             ///
859             /// # Errors
860             ///
861             /// This method returns the same errors as [`AsyncReadExt::read_exact`].
862             ///
863             /// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
864             ///
865             /// # Cancel safety
866             ///
867             /// This method is not cancellation safe. If the method is used as the
868             /// event in a [`tokio::select!`](crate::select) statement and some
869             /// other branch completes first, then some data may be lost.
870             ///
871             /// # Examples
872             ///
873             /// Read unsigned 16 bit little-endian integers from a `AsyncRead`:
874             ///
875             /// ```rust
876             /// use tokio::io::{self, AsyncReadExt};
877             ///
878             /// use std::io::Cursor;
879             ///
880             /// #[tokio::main]
881             /// async fn main() -> io::Result<()> {
882             ///     let mut reader = Cursor::new(vec![2, 5, 3, 0]);
883             ///
884             ///     assert_eq!(1282, reader.read_u16_le().await?);
885             ///     assert_eq!(3, reader.read_u16_le().await?);
886             ///     Ok(())
887             /// }
888             /// ```
889             fn read_u16_le(&mut self) -> ReadU16Le;
890 
891             /// Reads a signed 16-bit integer in little-endian order from the
892             /// underlying reader.
893             ///
894             /// Equivalent to:
895             ///
896             /// ```ignore
897             /// async fn read_i16_le(&mut self) -> io::Result<i16>;
898             /// ```
899             ///
900             /// It is recommended to use a buffered reader to avoid excessive
901             /// syscalls.
902             ///
903             /// # Errors
904             ///
905             /// This method returns the same errors as [`AsyncReadExt::read_exact`].
906             ///
907             /// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
908             ///
909             /// # Cancel safety
910             ///
911             /// This method is not cancellation safe. If the method is used as the
912             /// event in a [`tokio::select!`](crate::select) statement and some
913             /// other branch completes first, then some data may be lost.
914             ///
915             /// # Examples
916             ///
917             /// Read signed 16 bit little-endian integers from a `AsyncRead`:
918             ///
919             /// ```rust
920             /// use tokio::io::{self, AsyncReadExt};
921             ///
922             /// use std::io::Cursor;
923             ///
924             /// #[tokio::main]
925             /// async fn main() -> io::Result<()> {
926             ///     let mut reader = Cursor::new(vec![0x00, 0xc1, 0xff, 0x7c]);
927             ///
928             ///     assert_eq!(-16128, reader.read_i16_le().await?);
929             ///     assert_eq!(31999, reader.read_i16_le().await?);
930             ///     Ok(())
931             /// }
932             /// ```
933             fn read_i16_le(&mut self) -> ReadI16Le;
934 
935             /// Reads an unsigned 32-bit integer in little-endian order from the
936             /// underlying reader.
937             ///
938             /// Equivalent to:
939             ///
940             /// ```ignore
941             /// async fn read_u32_le(&mut self) -> io::Result<u32>;
942             /// ```
943             ///
944             /// It is recommended to use a buffered reader to avoid excessive
945             /// syscalls.
946             ///
947             /// # Errors
948             ///
949             /// This method returns the same errors as [`AsyncReadExt::read_exact`].
950             ///
951             /// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
952             ///
953             /// # Cancel safety
954             ///
955             /// This method is not cancellation safe. If the method is used as the
956             /// event in a [`tokio::select!`](crate::select) statement and some
957             /// other branch completes first, then some data may be lost.
958             ///
959             /// # Examples
960             ///
961             /// Read unsigned 32-bit little-endian integers from a `AsyncRead`:
962             ///
963             /// ```rust
964             /// use tokio::io::{self, AsyncReadExt};
965             ///
966             /// use std::io::Cursor;
967             ///
968             /// #[tokio::main]
969             /// async fn main() -> io::Result<()> {
970             ///     let mut reader = Cursor::new(vec![0x00, 0x00, 0x01, 0x0b]);
971             ///
972             ///     assert_eq!(184614912, reader.read_u32_le().await?);
973             ///     Ok(())
974             /// }
975             /// ```
976             fn read_u32_le(&mut self) -> ReadU32Le;
977 
978             /// Reads a signed 32-bit integer in little-endian order from the
979             /// underlying reader.
980             ///
981             ///
982             /// Equivalent to:
983             ///
984             /// ```ignore
985             /// async fn read_i32_le(&mut self) -> io::Result<i32>;
986             /// ```
987             ///
988             /// It is recommended to use a buffered reader to avoid excessive
989             /// syscalls.
990             ///
991             /// # Errors
992             ///
993             /// This method returns the same errors as [`AsyncReadExt::read_exact`].
994             ///
995             /// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
996             ///
997             /// # Cancel safety
998             ///
999             /// This method is not cancellation safe. If the method is used as the
1000             /// event in a [`tokio::select!`](crate::select) statement and some
1001             /// other branch completes first, then some data may be lost.
1002             ///
1003             /// # Examples
1004             ///
1005             /// Read signed 32-bit little-endian integers from a `AsyncRead`:
1006             ///
1007             /// ```rust
1008             /// use tokio::io::{self, AsyncReadExt};
1009             ///
1010             /// use std::io::Cursor;
1011             ///
1012             /// #[tokio::main]
1013             /// async fn main() -> io::Result<()> {
1014             ///     let mut reader = Cursor::new(vec![0xff, 0xff, 0x7a, 0x33]);
1015             ///
1016             ///     assert_eq!(863698943, reader.read_i32_le().await?);
1017             ///     Ok(())
1018             /// }
1019             /// ```
1020             fn read_i32_le(&mut self) -> ReadI32Le;
1021 
1022             /// Reads an unsigned 64-bit integer in little-endian order from the
1023             /// underlying reader.
1024             ///
1025             /// Equivalent to:
1026             ///
1027             /// ```ignore
1028             /// async fn read_u64_le(&mut self) -> io::Result<u64>;
1029             /// ```
1030             ///
1031             /// It is recommended to use a buffered reader to avoid excessive
1032             /// syscalls.
1033             ///
1034             /// # Errors
1035             ///
1036             /// This method returns the same errors as [`AsyncReadExt::read_exact`].
1037             ///
1038             /// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
1039             ///
1040             /// # Cancel safety
1041             ///
1042             /// This method is not cancellation safe. If the method is used as the
1043             /// event in a [`tokio::select!`](crate::select) statement and some
1044             /// other branch completes first, then some data may be lost.
1045             ///
1046             /// # Examples
1047             ///
1048             /// Read unsigned 64-bit little-endian integers from a `AsyncRead`:
1049             ///
1050             /// ```rust
1051             /// use tokio::io::{self, AsyncReadExt};
1052             ///
1053             /// use std::io::Cursor;
1054             ///
1055             /// #[tokio::main]
1056             /// async fn main() -> io::Result<()> {
1057             ///     let mut reader = Cursor::new(vec![
1058             ///         0x00, 0x03, 0x43, 0x95, 0x4d, 0x60, 0x86, 0x83
1059             ///     ]);
1060             ///
1061             ///     assert_eq!(9477368352180732672, reader.read_u64_le().await?);
1062             ///     Ok(())
1063             /// }
1064             /// ```
1065             fn read_u64_le(&mut self) -> ReadU64Le;
1066 
1067             /// Reads an signed 64-bit integer in little-endian order from the
1068             /// underlying reader.
1069             ///
1070             /// Equivalent to:
1071             ///
1072             /// ```ignore
1073             /// async fn read_i64_le(&mut self) -> io::Result<i64>;
1074             /// ```
1075             ///
1076             /// It is recommended to use a buffered reader to avoid excessive
1077             /// syscalls.
1078             ///
1079             /// # Errors
1080             ///
1081             /// This method returns the same errors as [`AsyncReadExt::read_exact`].
1082             ///
1083             /// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
1084             ///
1085             /// # Cancel safety
1086             ///
1087             /// This method is not cancellation safe. If the method is used as the
1088             /// event in a [`tokio::select!`](crate::select) statement and some
1089             /// other branch completes first, then some data may be lost.
1090             ///
1091             /// # Examples
1092             ///
1093             /// Read signed 64-bit little-endian integers from a `AsyncRead`:
1094             ///
1095             /// ```rust
1096             /// use tokio::io::{self, AsyncReadExt};
1097             ///
1098             /// use std::io::Cursor;
1099             ///
1100             /// #[tokio::main]
1101             /// async fn main() -> io::Result<()> {
1102             ///     let mut reader = Cursor::new(vec![0x80, 0, 0, 0, 0, 0, 0, 0]);
1103             ///
1104             ///     assert_eq!(128, reader.read_i64_le().await?);
1105             ///     Ok(())
1106             /// }
1107             /// ```
1108             fn read_i64_le(&mut self) -> ReadI64Le;
1109 
1110             /// Reads an unsigned 128-bit integer in little-endian order from the
1111             /// underlying reader.
1112             ///
1113             /// Equivalent to:
1114             ///
1115             /// ```ignore
1116             /// async fn read_u128_le(&mut self) -> io::Result<u128>;
1117             /// ```
1118             ///
1119             /// It is recommended to use a buffered reader to avoid excessive
1120             /// syscalls.
1121             ///
1122             /// # Errors
1123             ///
1124             /// This method returns the same errors as [`AsyncReadExt::read_exact`].
1125             ///
1126             /// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
1127             ///
1128             /// # Cancel safety
1129             ///
1130             /// This method is not cancellation safe. If the method is used as the
1131             /// event in a [`tokio::select!`](crate::select) statement and some
1132             /// other branch completes first, then some data may be lost.
1133             ///
1134             /// # Examples
1135             ///
1136             /// Read unsigned 128-bit little-endian integers from a `AsyncRead`:
1137             ///
1138             /// ```rust
1139             /// use tokio::io::{self, AsyncReadExt};
1140             ///
1141             /// use std::io::Cursor;
1142             ///
1143             /// #[tokio::main]
1144             /// async fn main() -> io::Result<()> {
1145             ///     let mut reader = Cursor::new(vec![
1146             ///         0x00, 0x03, 0x43, 0x95, 0x4d, 0x60, 0x86, 0x83,
1147             ///         0x00, 0x03, 0x43, 0x95, 0x4d, 0x60, 0x86, 0x83
1148             ///     ]);
1149             ///
1150             ///     assert_eq!(174826588484952389081207917399662330624, reader.read_u128_le().await?);
1151             ///     Ok(())
1152             /// }
1153             /// ```
1154             fn read_u128_le(&mut self) -> ReadU128Le;
1155 
1156             /// Reads an signed 128-bit integer in little-endian order from the
1157             /// underlying reader.
1158             ///
1159             /// Equivalent to:
1160             ///
1161             /// ```ignore
1162             /// async fn read_i128_le(&mut self) -> io::Result<i128>;
1163             /// ```
1164             ///
1165             /// It is recommended to use a buffered reader to avoid excessive
1166             /// syscalls.
1167             ///
1168             /// # Errors
1169             ///
1170             /// This method returns the same errors as [`AsyncReadExt::read_exact`].
1171             ///
1172             /// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
1173             ///
1174             /// # Cancel safety
1175             ///
1176             /// This method is not cancellation safe. If the method is used as the
1177             /// event in a [`tokio::select!`](crate::select) statement and some
1178             /// other branch completes first, then some data may be lost.
1179             ///
1180             /// # Examples
1181             ///
1182             /// Read signed 128-bit little-endian integers from a `AsyncRead`:
1183             ///
1184             /// ```rust
1185             /// use tokio::io::{self, AsyncReadExt};
1186             ///
1187             /// use std::io::Cursor;
1188             ///
1189             /// #[tokio::main]
1190             /// async fn main() -> io::Result<()> {
1191             ///     let mut reader = Cursor::new(vec![
1192             ///         0x80, 0, 0, 0, 0, 0, 0, 0,
1193             ///         0, 0, 0, 0, 0, 0, 0, 0
1194             ///     ]);
1195             ///
1196             ///     assert_eq!(128, reader.read_i128_le().await?);
1197             ///     Ok(())
1198             /// }
1199             /// ```
1200             fn read_i128_le(&mut self) -> ReadI128Le;
1201 
1202             /// Reads an 32-bit floating point type in little-endian order from the
1203             /// underlying reader.
1204             ///
1205             /// Equivalent to:
1206             ///
1207             /// ```ignore
1208             /// async fn read_f32_le(&mut self) -> io::Result<f32>;
1209             /// ```
1210             ///
1211             /// It is recommended to use a buffered reader to avoid excessive
1212             /// syscalls.
1213             ///
1214             /// # Errors
1215             ///
1216             /// This method returns the same errors as [`AsyncReadExt::read_exact`].
1217             ///
1218             /// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
1219             ///
1220             /// # Cancel safety
1221             ///
1222             /// This method is not cancellation safe. If the method is used as the
1223             /// event in a [`tokio::select!`](crate::select) statement and some
1224             /// other branch completes first, then some data may be lost.
1225             ///
1226             /// # Examples
1227             ///
1228             /// Read 32-bit floating point type from a `AsyncRead`:
1229             ///
1230             /// ```rust
1231             /// use tokio::io::{self, AsyncReadExt};
1232             ///
1233             /// use std::io::Cursor;
1234             ///
1235             /// #[tokio::main]
1236             /// async fn main() -> io::Result<()> {
1237             ///     let mut reader = Cursor::new(vec![0xff, 0xff, 0x7f, 0xff]);
1238             ///
1239             ///     assert_eq!(f32::MIN, reader.read_f32_le().await?);
1240             ///     Ok(())
1241             /// }
1242             /// ```
1243             fn read_f32_le(&mut self) -> ReadF32Le;
1244 
1245             /// Reads an 64-bit floating point type in little-endian order from the
1246             /// underlying reader.
1247             ///
1248             /// Equivalent to:
1249             ///
1250             /// ```ignore
1251             /// async fn read_f64_le(&mut self) -> io::Result<f64>;
1252             /// ```
1253             ///
1254             /// It is recommended to use a buffered reader to avoid excessive
1255             /// syscalls.
1256             ///
1257             /// # Errors
1258             ///
1259             /// This method returns the same errors as [`AsyncReadExt::read_exact`].
1260             ///
1261             /// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
1262             ///
1263             /// # Cancel safety
1264             ///
1265             /// This method is not cancellation safe. If the method is used as the
1266             /// event in a [`tokio::select!`](crate::select) statement and some
1267             /// other branch completes first, then some data may be lost.
1268             ///
1269             /// # Examples
1270             ///
1271             /// Read 64-bit floating point type from a `AsyncRead`:
1272             ///
1273             /// ```rust
1274             /// use tokio::io::{self, AsyncReadExt};
1275             ///
1276             /// use std::io::Cursor;
1277             ///
1278             /// #[tokio::main]
1279             /// async fn main() -> io::Result<()> {
1280             ///     let mut reader = Cursor::new(vec![
1281             ///         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff
1282             ///     ]);
1283             ///
1284             ///     assert_eq!(f64::MIN, reader.read_f64_le().await?);
1285             ///     Ok(())
1286             /// }
1287             /// ```
1288             fn read_f64_le(&mut self) -> ReadF64Le;
1289         }
1290 
1291         /// Reads all bytes until EOF in this source, placing them into `buf`.
1292         ///
1293         /// Equivalent to:
1294         ///
1295         /// ```ignore
1296         /// async fn read_to_end(&mut self, buf: &mut Vec<u8>) -> io::Result<usize>;
1297         /// ```
1298         ///
1299         /// All bytes read from this source will be appended to the specified
1300         /// buffer `buf`. This function will continuously call [`read()`] to
1301         /// append more data to `buf` until [`read()`] returns `Ok(0)`.
1302         ///
1303         /// If successful, the total number of bytes read is returned.
1304         ///
1305         /// [`read()`]: AsyncReadExt::read
1306         ///
1307         /// # Errors
1308         ///
1309         /// If a read error is encountered then the `read_to_end` operation
1310         /// immediately completes. Any bytes which have already been read will
1311         /// be appended to `buf`.
1312         ///
1313         /// # Examples
1314         ///
1315         /// [`File`][crate::fs::File]s implement `Read`:
1316         ///
1317         /// ```no_run
1318         /// use tokio::io::{self, AsyncReadExt};
1319         /// use tokio::fs::File;
1320         ///
1321         /// #[tokio::main]
1322         /// async fn main() -> io::Result<()> {
1323         ///     let mut f = File::open("foo.txt").await?;
1324         ///     let mut buffer = Vec::new();
1325         ///
1326         ///     // read the whole file
1327         ///     f.read_to_end(&mut buffer).await?;
1328         ///     Ok(())
1329         /// }
1330         /// ```
1331         ///
1332         /// (See also the [`tokio::fs::read`] convenience function for reading from a
1333         /// file.)
1334         ///
1335         /// [`tokio::fs::read`]: fn@crate::fs::read
1336         fn read_to_end<'a>(&'a mut self, buf: &'a mut Vec<u8>) -> ReadToEnd<'a, Self>
1337         where
1338             Self: Unpin,
1339         {
1340             read_to_end(self, buf)
1341         }
1342 
1343         /// Reads all bytes until EOF in this source, appending them to `buf`.
1344         ///
1345         /// Equivalent to:
1346         ///
1347         /// ```ignore
1348         /// async fn read_to_string(&mut self, buf: &mut String) -> io::Result<usize>;
1349         /// ```
1350         ///
1351         /// If successful, the number of bytes which were read and appended to
1352         /// `buf` is returned.
1353         ///
1354         /// # Errors
1355         ///
1356         /// If the data in this stream is *not* valid UTF-8 then an error is
1357         /// returned and `buf` is unchanged.
1358         ///
1359         /// See [`read_to_end`][AsyncReadExt::read_to_end] for other error semantics.
1360         ///
1361         /// # Examples
1362         ///
1363         /// [`File`][crate::fs::File]s implement `Read`:
1364         ///
1365         /// ```no_run
1366         /// use tokio::io::{self, AsyncReadExt};
1367         /// use tokio::fs::File;
1368         ///
1369         /// #[tokio::main]
1370         /// async fn main() -> io::Result<()> {
1371         ///     let mut f = File::open("foo.txt").await?;
1372         ///     let mut buffer = String::new();
1373         ///
1374         ///     f.read_to_string(&mut buffer).await?;
1375         ///     Ok(())
1376         /// }
1377         /// ```
1378         ///
1379         /// (See also the [`crate::fs::read_to_string`] convenience function for
1380         /// reading from a file.)
1381         ///
1382         /// [`crate::fs::read_to_string`]: fn@crate::fs::read_to_string
1383         fn read_to_string<'a>(&'a mut self, dst: &'a mut String) -> ReadToString<'a, Self>
1384         where
1385             Self: Unpin,
1386         {
1387             read_to_string(self, dst)
1388         }
1389 
1390         /// Creates an adaptor which reads at most `limit` bytes from it.
1391         ///
1392         /// This function returns a new instance of `AsyncRead` which will read
1393         /// at most `limit` bytes, after which it will always return EOF
1394         /// (`Ok(0)`). Any read errors will not count towards the number of
1395         /// bytes read and future calls to [`read()`] may succeed.
1396         ///
1397         /// [`read()`]: fn@crate::io::AsyncReadExt::read
1398         ///
1399         /// [read]: AsyncReadExt::read
1400         ///
1401         /// # Examples
1402         ///
1403         /// [`File`][crate::fs::File]s implement `Read`:
1404         ///
1405         /// ```no_run
1406         /// use tokio::io::{self, AsyncReadExt};
1407         /// use tokio::fs::File;
1408         ///
1409         /// #[tokio::main]
1410         /// async fn main() -> io::Result<()> {
1411         ///     let f = File::open("foo.txt").await?;
1412         ///     let mut buffer = [0; 5];
1413         ///
1414         ///     // read at most five bytes
1415         ///     let mut handle = f.take(5);
1416         ///
1417         ///     handle.read(&mut buffer).await?;
1418         ///     Ok(())
1419         /// }
1420         /// ```
1421         fn take(self, limit: u64) -> Take<Self>
1422         where
1423             Self: Sized,
1424         {
1425             take(self, limit)
1426         }
1427     }
1428 }
1429 
1430 impl<R: AsyncRead + ?Sized> AsyncReadExt for R {}
1431