pub struct LoadTransformAndSave<L: AssetLoader, T: AssetTransformer<AssetInput = L::Asset>, S: AssetSaver<Asset = T::AssetOutput>> { /* private fields */ }Expand description
A flexible Process implementation that loads the source Asset using the L AssetLoader, then transforms
the L asset into an S AssetSaver asset using the T AssetTransformer, and lastly saves the asset using the S AssetSaver.
When creating custom processors, it is generally recommended to use the LoadTransformAndSave Process implementation,
as it encourages you to separate your code into an AssetLoader capable of loading assets without processing enabled,
an AssetTransformer capable of converting from an L asset to an S asset, and
an AssetSaver that allows you save any S asset. However you can
also implement Process directly if LoadTransformAndSave feels limiting or unnecessary.
If your Process does not need to transform the Asset, you can use IdentityAssetTransformer as T.
This will directly return the input Asset, allowing your Process to directly load and then save an Asset.
However, this pattern should only be used for cases such as file format conversion.
Otherwise, consider refactoring your AssetLoader and AssetSaver to isolate the transformation step into an explicit AssetTransformer.
This uses LoadTransformAndSaveSettings to configure the processor.
Implementations§
Source§impl<L: AssetLoader, T: AssetTransformer<AssetInput = L::Asset>, S: AssetSaver<Asset = T::AssetOutput>> LoadTransformAndSave<L, T, S>
impl<L: AssetLoader, T: AssetTransformer<AssetInput = L::Asset>, S: AssetSaver<Asset = T::AssetOutput>> LoadTransformAndSave<L, T, S>
Trait Implementations§
Source§impl<L: AssetLoader, S: AssetSaver<Asset = L::Asset>> From<S> for LoadTransformAndSave<L, IdentityAssetTransformer<L::Asset>, S>
impl<L: AssetLoader, S: AssetSaver<Asset = L::Asset>> From<S> for LoadTransformAndSave<L, IdentityAssetTransformer<L::Asset>, S>
Source§impl<Loader, Transformer, Saver> Process for LoadTransformAndSave<Loader, Transformer, Saver>where
Loader: AssetLoader,
Transformer: AssetTransformer<AssetInput = Loader::Asset>,
Saver: AssetSaver<Asset = Transformer::AssetOutput>,
impl<Loader, Transformer, Saver> Process for LoadTransformAndSave<Loader, Transformer, Saver>where
Loader: AssetLoader,
Transformer: AssetTransformer<AssetInput = Loader::Asset>,
Saver: AssetSaver<Asset = Transformer::AssetOutput>,
Source§type Settings = LoadTransformAndSaveSettings<<Loader as AssetLoader>::Settings, <Transformer as AssetTransformer>::Settings, <Saver as AssetSaver>::Settings>
type Settings = LoadTransformAndSaveSettings<<Loader as AssetLoader>::Settings, <Transformer as AssetTransformer>::Settings, <Saver as AssetSaver>::Settings>
AssetMeta and is user-configurable per-asset.Source§type OutputLoader = <Saver as AssetSaver>::OutputLoader
type OutputLoader = <Saver as AssetSaver>::OutputLoader
AssetLoader that will be used to load the final processed asset.Source§async fn process(
&self,
context: &mut ProcessContext<'_>,
meta: AssetMeta<(), Self>,
writer: &mut Writer,
) -> Result<<Self::OutputLoader as AssetLoader>::Settings, ProcessError>
async fn process( &self, context: &mut ProcessContext<'_>, meta: AssetMeta<(), Self>, writer: &mut Writer, ) -> Result<<Self::OutputLoader as AssetLoader>::Settings, ProcessError>
context in some way using the settings stored on meta. The results are written to writer. The
final written processed asset is loadable using Process::OutputLoader. This load will use the returned AssetLoader::Settings.Auto Trait Implementations§
impl<L, T, S> Freeze for LoadTransformAndSave<L, T, S>
impl<L, T, S> RefUnwindSafe for LoadTransformAndSave<L, T, S>where
T: RefUnwindSafe,
S: RefUnwindSafe,
impl<L, T, S> Send for LoadTransformAndSave<L, T, S>
impl<L, T, S> Sync for LoadTransformAndSave<L, T, S>
impl<L, T, S> Unpin for LoadTransformAndSave<L, T, S>
impl<L, T, S> UnwindSafe for LoadTransformAndSave<L, T, S>where
T: UnwindSafe,
S: UnwindSafe,
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.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<P> ErasedProcessor for Pwhere
P: Process,
impl<P> ErasedProcessor for Pwhere
P: Process,
Source§fn process<'a>(
&'a self,
context: &'a mut ProcessContext<'_>,
meta: Box<dyn AssetMetaDyn>,
writer: &'a mut (dyn AsyncWrite + Sync + Send + Unpin + 'static),
) -> Pin<Box<dyn ConditionalSendFuture<Output = Result<Box<dyn AssetMetaDyn>, ProcessError>> + 'a>>
fn process<'a>( &'a self, context: &'a mut ProcessContext<'_>, meta: Box<dyn AssetMetaDyn>, writer: &'a mut (dyn AsyncWrite + Sync + Send + Unpin + 'static), ) -> Pin<Box<dyn ConditionalSendFuture<Output = Result<Box<dyn AssetMetaDyn>, ProcessError>> + 'a>>
Process::process.Source§fn deserialize_meta(
&self,
meta: &[u8],
) -> Result<Box<dyn AssetMetaDyn>, DeserializeMetaError>
fn deserialize_meta( &self, meta: &[u8], ) -> Result<Box<dyn AssetMetaDyn>, DeserializeMetaError>
Source§fn default_meta(&self) -> Box<dyn AssetMetaDyn>
fn default_meta(&self) -> Box<dyn AssetMetaDyn>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more