Skip to main content

FallbackFilesystem

Struct FallbackFilesystem 

Source
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

Source

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

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,

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 filesystem
  • Err(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,

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 written
  • data - The bytes to write
§Returns
  • Ok(()) - If any filesystem successfully writes the data
  • Err(FilesystemError::WriteUnsupported) - If all filesystems fail to write

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts 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>

Converts 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)

Converts &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)

Converts &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSend for T
where T: Any + Send,

Source§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_sync(self: Box<T>) -> Box<dyn Any + Send + Sync>

Converts Box<Trait> (where Trait: DowncastSync) to Box<dyn Any + Send + Sync>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Converts Arc<Trait> (where Trait: DowncastSync) to Arc<Any>, which can then be downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.