File tree Expand file tree Collapse file tree 1 file changed +22
-1
lines changed
Expand file tree Collapse file tree 1 file changed +22
-1
lines changed Original file line number Diff line number Diff line change @@ -125,7 +125,28 @@ pub trait Reader: AsyncRead + Unpin + Send + Sync {
125125 }
126126
127127 /// Casts this [`Reader`] as a [`SeekableReader`], which layers on [`AsyncSeek`] functionality.
128- /// Returns [`Some`] if this [`Reader`] supports seeking. Otherwise returns [`None`].
128+ /// Returns [`Ok`] if this [`Reader`] supports seeking. Otherwise returns [`Err`].
129+ ///
130+ /// Implementers of [`Reader`] are highly encouraged to provide this functionality, as it makes the
131+ /// reader compatible with "seeking" [`AssetLoader`](crate::AssetLoader) implementations.
132+ ///
133+ /// [`AssetLoader`](crate::AssetLoader) implementations that call this are encouraged to provide fallback behavior
134+ /// when it fails, such as reading into a seek-able [`Vec`] (or [`AsyncSeek`]-able [`VecReader`]):
135+ ///
136+ /// ```
137+ /// # use bevy_asset::io::{VecReader, Reader, AsyncSeekExt};
138+ /// # use std::{io::SeekFrom, vec::Vec};
139+ /// # let mut vec_reader = VecReader::new(Vec::new());
140+ /// # let reader: &mut dyn Reader = &mut vec_reader;
141+ /// let reader = match reader.seekable() {
142+ /// Ok(seek) => seek,
143+ /// Err(_) => {
144+ /// reader.read_to_end(&mut data.bytes).await.unwrap();
145+ /// &mut data
146+ /// }
147+ /// };
148+ /// reader.seek(SeekFrom::Start(10)).await.unwrap();
149+ /// ```
129150 fn seekable ( & mut self ) -> Result < & mut dyn SeekableReader , ReaderNotSeekableError > ;
130151}
131152
You can’t perform that action at this time.
0 commit comments