Skip to content

Commit e6db550

Browse files
committed
Extend docs
1 parent 29fa5a6 commit e6db550

File tree

1 file changed

+22
-1
lines changed
  • crates/bevy_asset/src/io

1 file changed

+22
-1
lines changed

crates/bevy_asset/src/io/mod.rs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff 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

0 commit comments

Comments
 (0)