pub struct FallbackFilesystem { /* private fields */ }Expand description
A filesystem implementation that tries multiple fallback filesystems in order.
FallbackFilesystem allows chaining multiple filesystem implementations together,
attempting operations on each one in sequence until one succeeds. This is useful
for implementing layered asset loading where assets might be located in different
locations (e.g., first check a mod directory, then fall back to base game assets).
Implementations§
Source§impl FallbackFilesystem
impl FallbackFilesystem
Sourcepub fn new(fallbacks: Vec<Arc<dyn Filesystem>>) -> Self
pub fn new(fallbacks: Vec<Arc<dyn Filesystem>>) -> Self
Creates a new FallbackFilesystem with the given list of fallback filesystems.
The filesystems will be tried in the order they appear in the vector. Earlier filesystems have priority over later ones.
§Arguments
fallbacks- A vector of filesystem implementations to use as fallbacks
§Example
let mod_fs = Arc::new(NativeFilesystem::new("mods/"));
let base_fs = Arc::new(NativeFilesystem::new("assets/"));
let fallback = FallbackFilesystem::new(vec![mod_fs, base_fs]);Trait Implementations§
Source§impl Filesystem for FallbackFilesystem
impl Filesystem for FallbackFilesystem
Source§fn read_bytes<'life0, 'life1, 'async_trait>(
&'life0 self,
asset_path: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, FilesystemError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn read_bytes<'life0, 'life1, 'async_trait>(
&'life0 self,
asset_path: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, FilesystemError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Attempts to read bytes from the asset path using the fallback filesystems.
Tries each filesystem in order until one successfully reads the asset. Returns the bytes from the first successful read operation.
§Arguments
asset_path- The path to the asset to read
§Returns
Ok(Vec<u8>)- The asset bytes from the first successful filesystemErr(FilesystemError::NotFound)- If all filesystems fail to find the asset
Source§fn write_bytes<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
asset_path: &'life1 str,
data: &'life2 [u8],
) -> Pin<Box<dyn Future<Output = Result<(), FilesystemError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn write_bytes<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
asset_path: &'life1 str,
data: &'life2 [u8],
) -> Pin<Box<dyn Future<Output = Result<(), FilesystemError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Attempts to write bytes to the asset path using the fallback filesystems.
Tries each filesystem in order until one successfully writes the asset. The write operation stops at the first successful filesystem.
§Arguments
asset_path- The path where the asset should be writtendata- The bytes to write
§Returns
Ok(())- If any filesystem successfully writes the dataErr(FilesystemError::WriteUnsupported)- If all filesystems fail to write
Auto Trait Implementations§
impl Freeze for FallbackFilesystem
impl !RefUnwindSafe for FallbackFilesystem
impl Send for FallbackFilesystem
impl Sync for FallbackFilesystem
impl Unpin for FallbackFilesystem
impl UnsafeUnpin for FallbackFilesystem
impl !UnwindSafe for FallbackFilesystem
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.