| 1 | mod seek; |
| 2 | |
| 3 | use seek::SeekFuture; |
| 4 | |
| 5 | use crate::io::SeekFrom; |
| 6 | |
| 7 | pub use futures_io::AsyncSeek as Seek; |
| 8 | |
| 9 | #[doc = r#" |
| 10 | Extension methods for [`Seek`]. |
| 11 | |
| 12 | [`Seek`]: ../trait.Seek.html |
| 13 | "# ] |
| 14 | pub trait SeekExt: Seek { |
| 15 | #[doc = r#" |
| 16 | Seeks to a new position in a byte stream. |
| 17 | |
| 18 | Returns the new position in the byte stream. |
| 19 | |
| 20 | A seek beyond the end of stream is allowed, but behavior is defined by the |
| 21 | implementation. |
| 22 | |
| 23 | # Examples |
| 24 | |
| 25 | ```no_run |
| 26 | # fn main() -> std::io::Result<()> { async_std::task::block_on(async { |
| 27 | # |
| 28 | use async_std::fs::File; |
| 29 | use async_std::io::SeekFrom; |
| 30 | use async_std::prelude::*; |
| 31 | |
| 32 | let mut file = File::open("a.txt" ).await?; |
| 33 | |
| 34 | let file_len = file.seek(SeekFrom::End(0)).await?; |
| 35 | # |
| 36 | # Ok(()) }) } |
| 37 | ``` |
| 38 | "# ] |
| 39 | fn seek( |
| 40 | &mut self, |
| 41 | pos: SeekFrom, |
| 42 | ) -> SeekFuture<'_, Self> |
| 43 | where |
| 44 | Self: Unpin, |
| 45 | { |
| 46 | SeekFuture { seeker: self, pos } |
| 47 | } |
| 48 | } |
| 49 | |
| 50 | impl<T: Seek + ?Sized> SeekExt for T {} |
| 51 | |