bevyengine/bevy · error · ReaderNotSeekableError

The `Reader` returned by the current `AssetReader` does not

Error message

The `Reader` returned by the current `AssetReader` does not support `AsyncSeek` behavior.

What it means

ReaderNotSeekableError: Reader::seekable() was called on a reader implementation that does not support AsyncSeek (e.g. streamed HTTP readers or other forward-only sources). Seeking backwards/forwards is unavailable, so consumers requiring random access cannot use this reader.

Source

Thrown at crates/bevy_asset/src/io/mod.rs:156

    ///         &mut fallback_reader
    ///     }
    /// };
    /// reader.seek(SeekFrom::Start(10)).await.unwrap();
    /// # };
    /// ```
    fn seekable(&mut self) -> Result<&mut dyn SeekableReader, ReaderNotSeekableError>;
}

/// A [`Reader`] that also has [`AsyncSeek`] functionality.
/// See [`Reader::seekable`] for details.
pub trait SeekableReader: Reader + AsyncSeek {}

impl<T: Reader + AsyncSeek> SeekableReader for T {}

/// Error returned by [`Reader::seekable`] when the reader implementation does not support [`AsyncSeek`] behavior.
#[derive(Error, Debug, Copy, Clone)]
#[error(
    "The `Reader` returned by the current `AssetReader` does not support `AsyncSeek` behavior."
)]
pub struct ReaderNotSeekableError;

impl Reader for Box<dyn Reader + '_> {
    fn read_to_end<'a>(
        &'a mut self,
        buf: &'a mut Vec<u8>,
    ) -> StackFuture<'a, std::io::Result<usize>, STACK_FUTURE_SIZE> {
        (**self).read_to_end(buf)
    }

    fn seekable(&mut self) -> Result<&mut dyn SeekableReader, ReaderNotSeekableError> {
        (**self).seekable()
    }
}

/// A future that returns a value or an [`AssetReaderError`]
pub trait AssetReaderFuture:

View on GitHub (pinned to 396ca72708)

Solutions

  1. Buffer the whole reader first and seek over the in-memory bytes
  2. Choose an AssetReader backend that supports seeking (file/memory sources)
  3. Handle the error and fall back to sequential reads when seeking is unavailable
Defensive patterns

Strategy: type-guard

When it happens

Trigger: Thrown at crates/bevy_asset/src/io/mod.rs:156 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of bevyengine/bevy@396ca72708 (2026-08-20). Data as JSON: /api/errors/e06ccdb699ac81af. Report an issue: GitHub.