pub enum HandleTemplate<T>where
T: Asset,{
Path(AssetPath<'static>),
Handle(Handle<T>),
Value(ArcMutexValue<T>),
}Expand description
A Template that produces a Handle.
§How asset paths are resolved in templates
When a type with a Handle<T> field derives FromTemplate, that field is replaced by its
template type, HandleTemplate<T>, when created via BSN.
We can see that HandleTemplate<T> has the following trait impl block:
impl<I: Into<AssetPath<'static>>, T: Asset> From<I> for HandleTemplate<T> {
fn from(value: I) -> Self {
Self::Path(value.into())
}
}AssetPath<'static> implements From<&'static str>.
Because of that, assigning a string literal to a Handle<T> field automatically converts it into
HandleTemplate<T>::Path with that asset path when used in the bsn! macro.
Calls to bsn! automatically insert .into() conversions, and due to Rust’s blanket impl that turns From trait impls into their Into
equivalents, the conversion from &'static str to AssetPath<'static> is handled automatically.
Finally, the HandleTemplate<T>::Path generated gets converted to a Handle<T> during scene initialization,
as the asset is loaded from the given path, and the resulting handle is assigned to the field,
pointing to the asset that was found at the file path in our original string.
Variants§
Path(AssetPath<'static>)
Creates a Handle by calling AssetServer::load on the given AssetPath.
Handle(Handle<T>)
Value(ArcMutexValue<T>)
Creates a Handle by adding the given asset value using AssetServer::add. This will
cache the resulting Handle on the template and reuse it for future template builds.
This should generally be constructed using HandleTemplate::value or asset_value.
Implementations§
Source§impl<T> HandleTemplate<T>where
T: Asset,
impl<T> HandleTemplate<T>where
T: Asset,
Sourcepub fn value(value: impl Into<T>) -> HandleTemplate<T>
pub fn value(value: impl Into<T>) -> HandleTemplate<T>
This will create a new HandleTemplate for the given asset value. This makes it possible
to define assets “inline” in templates / scenes that produce a Handle.
This supports Into
to automatically convert values that can become A.
Trait Implementations§
Source§impl<T> Default for HandleTemplate<T>where
T: Asset,
impl<T> Default for HandleTemplate<T>where
T: Asset,
Source§fn default() -> HandleTemplate<T>
fn default() -> HandleTemplate<T>
Source§impl<T> Enum for HandleTemplate<T>where
T: Asset + TypePath,
HandleTemplate<T>: Any + Send + Sync,
Handle<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ArcMutexValue<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl<T> Enum for HandleTemplate<T>where
T: Asset + TypePath,
HandleTemplate<T>: Any + Send + Sync,
Handle<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ArcMutexValue<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn field(&self, __name_param: &str) -> Option<&(dyn PartialReflect + 'static)>
fn field(&self, __name_param: &str) -> Option<&(dyn PartialReflect + 'static)>
Source§fn field_at(
&self,
__index_param: usize,
) -> Option<&(dyn PartialReflect + 'static)>
fn field_at( &self, __index_param: usize, ) -> Option<&(dyn PartialReflect + 'static)>
Source§fn field_mut(
&mut self,
__name_param: &str,
) -> Option<&mut (dyn PartialReflect + 'static)>
fn field_mut( &mut self, __name_param: &str, ) -> Option<&mut (dyn PartialReflect + 'static)>
Source§fn field_at_mut(
&mut self,
__index_param: usize,
) -> Option<&mut (dyn PartialReflect + 'static)>
fn field_at_mut( &mut self, __index_param: usize, ) -> Option<&mut (dyn PartialReflect + 'static)>
Source§fn index_of(&self, __name_param: &str) -> Option<usize>
fn index_of(&self, __name_param: &str) -> Option<usize>
Source§fn name_at(&self, __index_param: usize) -> Option<&str>
fn name_at(&self, __index_param: usize) -> Option<&str>
Source§fn iter_fields(&self) -> VariantFieldIter<'_> ⓘ
fn iter_fields(&self) -> VariantFieldIter<'_> ⓘ
Source§fn variant_name(&self) -> &str
fn variant_name(&self) -> &str
Source§fn variant_index(&self) -> usize
fn variant_index(&self) -> usize
Source§fn variant_type(&self) -> VariantType
fn variant_type(&self) -> VariantType
Source§fn to_dynamic_enum(&self) -> DynamicEnum
fn to_dynamic_enum(&self) -> DynamicEnum
DynamicEnum from this enum.Source§fn is_variant(&self, variant_type: VariantType) -> bool
fn is_variant(&self, variant_type: VariantType) -> bool
Source§fn variant_path(&self) -> String
fn variant_path(&self) -> String
Source§impl<T> From<Handle<T>> for HandleTemplate<T>where
T: Asset,
impl<T> From<Handle<T>> for HandleTemplate<T>where
T: Asset,
Source§fn from(value: Handle<T>) -> HandleTemplate<T>
fn from(value: Handle<T>) -> HandleTemplate<T>
Source§impl<I, T> From<I> for HandleTemplate<T>
impl<I, T> From<I> for HandleTemplate<T>
Source§fn from(value: I) -> HandleTemplate<T>
fn from(value: I) -> HandleTemplate<T>
Source§impl<T> FromReflect for HandleTemplate<T>where
T: Asset + TypePath,
HandleTemplate<T>: Any + Send + Sync,
Handle<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ArcMutexValue<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl<T> FromReflect for HandleTemplate<T>where
T: Asset + TypePath,
HandleTemplate<T>: Any + Send + Sync,
Handle<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ArcMutexValue<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn from_reflect(
__param0: &(dyn PartialReflect + 'static),
) -> Option<HandleTemplate<T>>
fn from_reflect( __param0: &(dyn PartialReflect + 'static), ) -> Option<HandleTemplate<T>>
Self from a reflected value.Source§fn take_from_reflect(
reflect: Box<dyn PartialReflect>,
) -> Result<Self, Box<dyn PartialReflect>>
fn take_from_reflect( reflect: Box<dyn PartialReflect>, ) -> Result<Self, Box<dyn PartialReflect>>
Self using,
constructing the value using from_reflect if that fails. Read moreSource§impl<T> GetTypeRegistration for HandleTemplate<T>where
T: Asset + TypePath,
HandleTemplate<T>: Any + Send + Sync,
Handle<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ArcMutexValue<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl<T> GetTypeRegistration for HandleTemplate<T>where
T: Asset + TypePath,
HandleTemplate<T>: Any + Send + Sync,
Handle<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ArcMutexValue<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn get_type_registration() -> TypeRegistration
fn get_type_registration() -> TypeRegistration
TypeRegistration for this type.Source§fn register_type_dependencies(registry: &mut TypeRegistry)
fn register_type_dependencies(registry: &mut TypeRegistry)
Source§impl<T> PartialReflect for HandleTemplate<T>where
T: Asset + TypePath,
HandleTemplate<T>: Any + Send + Sync,
Handle<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ArcMutexValue<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl<T> PartialReflect for HandleTemplate<T>where
T: Asset + TypePath,
HandleTemplate<T>: Any + Send + Sync,
Handle<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ArcMutexValue<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
Source§fn try_apply(
&mut self,
__value_param: &(dyn PartialReflect + 'static),
) -> Result<(), ApplyError>
fn try_apply( &mut self, __value_param: &(dyn PartialReflect + 'static), ) -> Result<(), ApplyError>
Source§fn reflect_kind(&self) -> ReflectKind
fn reflect_kind(&self) -> ReflectKind
Source§fn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_ref(&self) -> ReflectRef<'_>
Source§fn reflect_mut(&mut self) -> ReflectMut<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
Source§fn reflect_owned(self: Box<HandleTemplate<T>>) -> ReflectOwned
fn reflect_owned(self: Box<HandleTemplate<T>>) -> ReflectOwned
Source§fn try_into_reflect(
self: Box<HandleTemplate<T>>,
) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
fn try_into_reflect( self: Box<HandleTemplate<T>>, ) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
Source§fn try_as_reflect(&self) -> Option<&(dyn Reflect + 'static)>
fn try_as_reflect(&self) -> Option<&(dyn Reflect + 'static)>
Source§fn try_as_reflect_mut(&mut self) -> Option<&mut (dyn Reflect + 'static)>
fn try_as_reflect_mut(&mut self) -> Option<&mut (dyn Reflect + 'static)>
Source§fn into_partial_reflect(self: Box<HandleTemplate<T>>) -> Box<dyn PartialReflect>
fn into_partial_reflect(self: Box<HandleTemplate<T>>) -> Box<dyn PartialReflect>
Source§fn as_partial_reflect(&self) -> &(dyn PartialReflect + 'static)
fn as_partial_reflect(&self) -> &(dyn PartialReflect + 'static)
Source§fn as_partial_reflect_mut(&mut self) -> &mut (dyn PartialReflect + 'static)
fn as_partial_reflect_mut(&mut self) -> &mut (dyn PartialReflect + 'static)
Source§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
Source§fn reflect_partial_eq(
&self,
value: &(dyn PartialReflect + 'static),
) -> Option<bool>
fn reflect_partial_eq( &self, value: &(dyn PartialReflect + 'static), ) -> Option<bool>
Source§fn reflect_partial_cmp(
&self,
value: &(dyn PartialReflect + 'static),
) -> Option<Ordering>
fn reflect_partial_cmp( &self, value: &(dyn PartialReflect + 'static), ) -> Option<Ordering>
Source§fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
Self using reflection. Read moreSource§fn apply(&mut self, value: &(dyn PartialReflect + 'static))
fn apply(&mut self, value: &(dyn PartialReflect + 'static))
Source§fn to_dynamic(&self) -> Box<dyn PartialReflect>
fn to_dynamic(&self) -> Box<dyn PartialReflect>
Source§fn reflect_clone_and_take<T>(&self) -> Result<T, ReflectCloneError>
fn reflect_clone_and_take<T>(&self) -> Result<T, ReflectCloneError>
PartialReflect, combines reflect_clone and
take in a useful fashion, automatically constructing an appropriate
ReflectCloneError if the downcast fails.Source§fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
Source§fn is_dynamic(&self) -> bool
fn is_dynamic(&self) -> bool
Source§impl<T> Reflect for HandleTemplate<T>where
T: Asset + TypePath,
HandleTemplate<T>: Any + Send + Sync,
Handle<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ArcMutexValue<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl<T> Reflect for HandleTemplate<T>where
T: Asset + TypePath,
HandleTemplate<T>: Any + Send + Sync,
Handle<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ArcMutexValue<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn into_any(self: Box<HandleTemplate<T>>) -> Box<dyn Any>
fn into_any(self: Box<HandleTemplate<T>>) -> Box<dyn Any>
Box<dyn Any>. Read moreSource§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut dyn Any. Read moreSource§fn into_reflect(self: Box<HandleTemplate<T>>) -> Box<dyn Reflect>
fn into_reflect(self: Box<HandleTemplate<T>>) -> Box<dyn Reflect>
Source§fn as_reflect(&self) -> &(dyn Reflect + 'static)
fn as_reflect(&self) -> &(dyn Reflect + 'static)
Source§fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
Source§impl<T> Template for HandleTemplate<T>where
T: Asset,
impl<T> Template for HandleTemplate<T>where
T: Asset,
Source§fn build_template(
&self,
context: &mut TemplateContext<'_, '_>,
) -> Result<Handle<T>, BevyError>
fn build_template( &self, context: &mut TemplateContext<'_, '_>, ) -> Result<Handle<T>, BevyError>
entity context to produce a Template::Output.Source§fn clone_template(&self) -> HandleTemplate<T>
fn clone_template(&self) -> HandleTemplate<T>
Clone.Source§impl<T> TypePath for HandleTemplate<T>
impl<T> TypePath for HandleTemplate<T>
Source§fn type_path() -> &'static str
fn type_path() -> &'static str
Source§fn short_type_path() -> &'static str
fn short_type_path() -> &'static str
Source§fn type_ident() -> Option<&'static str>
fn type_ident() -> Option<&'static str>
Source§fn crate_name() -> Option<&'static str>
fn crate_name() -> Option<&'static str>
Source§impl<T> Typed for HandleTemplate<T>where
T: Asset + TypePath,
HandleTemplate<T>: Any + Send + Sync,
Handle<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ArcMutexValue<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl<T> Typed for HandleTemplate<T>where
T: Asset + TypePath,
HandleTemplate<T>: Any + Send + Sync,
Handle<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ArcMutexValue<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Auto Trait Implementations§
impl<T> !RefUnwindSafe for HandleTemplate<T>
impl<T> !Unpin for HandleTemplate<T>
impl<T> !UnwindSafe for HandleTemplate<T>
impl<T> Freeze for HandleTemplate<T>
impl<T> Send for HandleTemplate<T>
impl<T> Sync for HandleTemplate<T>
impl<T> UnsafeUnpin for HandleTemplate<T>
Blanket Implementations§
Source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
Source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
T ShaderType for self. When used in AsBindGroup
derives, it is safe to assume that all images in self exist.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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<T> ConditionalSend for Twhere
T: Send,
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> 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>. Box<dyn Any> can
then be further downcast into Box<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>. Rc<Any> 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<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> DynamicTypePath for Twhere
T: TypePath,
impl<T> DynamicTypePath for Twhere
T: TypePath,
Source§fn reflect_type_path(&self) -> &str
fn reflect_type_path(&self) -> &str
TypePath::type_path.Source§fn reflect_short_type_path(&self) -> &str
fn reflect_short_type_path(&self) -> &str
Source§fn reflect_type_ident(&self) -> Option<&str>
fn reflect_type_ident(&self) -> Option<&str>
TypePath::type_ident.Source§fn reflect_crate_name(&self) -> Option<&str>
fn reflect_crate_name(&self) -> Option<&str>
TypePath::crate_name.Source§fn reflect_module_path(&self) -> Option<&str>
fn reflect_module_path(&self) -> Option<&str>
Source§impl<T> DynamicTyped for Twhere
T: Typed,
impl<T> DynamicTyped for Twhere
T: Typed,
Source§fn reflect_type_info(&self) -> &'static TypeInfo
fn reflect_type_info(&self) -> &'static TypeInfo
Typed::type_info.Source§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
Source§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Creates Self using default().
Source§impl<T> GetPath for T
impl<T> GetPath for T
Source§fn reflect_path<'p>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&(dyn PartialReflect + 'static), ReflectPathError<'p>>
fn reflect_path<'p>( &self, path: impl ReflectPath<'p>, ) -> Result<&(dyn PartialReflect + 'static), ReflectPathError<'p>>
path. Read moreSource§fn reflect_path_mut<'p>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut (dyn PartialReflect + 'static), ReflectPathError<'p>>
fn reflect_path_mut<'p>( &mut self, path: impl ReflectPath<'p>, ) -> Result<&mut (dyn PartialReflect + 'static), ReflectPathError<'p>>
path. Read moreSource§fn path<'p, T>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
fn path<'p, T>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
path. Read moreSource§fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
path. Read moreSource§impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
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