pub enum HandleTemplate<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: Asset> HandleTemplate<T>
impl<T: Asset> HandleTemplate<T>
Trait Implementations§
Source§impl<T: Asset> Default for HandleTemplate<T>
impl<T: Asset> Default for HandleTemplate<T>
Source§impl<T> Enum for HandleTemplate<T>where
HandleTemplate<T>: Any + Send + Sync,
T: TypePath + Asset,
Handle<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ArcMutexValue<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl<T> Enum for HandleTemplate<T>where
HandleTemplate<T>: Any + Send + Sync,
T: TypePath + Asset,
Handle<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ArcMutexValue<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn field(&self, __name_param: &str) -> Option<&dyn PartialReflect>
fn field(&self, __name_param: &str) -> Option<&dyn PartialReflect>
Source§fn field_at(&self, __index_param: usize) -> Option<&dyn PartialReflect>
fn field_at(&self, __index_param: usize) -> Option<&dyn PartialReflect>
Source§fn field_mut(&mut self, __name_param: &str) -> Option<&mut dyn PartialReflect>
fn field_mut(&mut self, __name_param: &str) -> Option<&mut dyn PartialReflect>
Source§fn field_at_mut(
&mut self,
__index_param: usize,
) -> Option<&mut dyn PartialReflect>
fn field_at_mut( &mut self, __index_param: usize, ) -> Option<&mut dyn PartialReflect>
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> FromReflect for HandleTemplate<T>where
HandleTemplate<T>: Any + Send + Sync,
T: TypePath + Asset,
Handle<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ArcMutexValue<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl<T> FromReflect for HandleTemplate<T>where
HandleTemplate<T>: Any + Send + Sync,
T: TypePath + Asset,
Handle<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ArcMutexValue<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn from_reflect(__param0: &dyn PartialReflect) -> Option<Self>
fn from_reflect(__param0: &dyn PartialReflect) -> Option<Self>
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
HandleTemplate<T>: Any + Send + Sync,
T: TypePath + Asset,
Handle<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ArcMutexValue<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl<T> GetTypeRegistration for HandleTemplate<T>where
HandleTemplate<T>: Any + Send + Sync,
T: TypePath + Asset,
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
HandleTemplate<T>: Any + Send + Sync,
T: TypePath + Asset,
Handle<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ArcMutexValue<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl<T> PartialReflect for HandleTemplate<T>where
HandleTemplate<T>: Any + Send + Sync,
T: TypePath + Asset,
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,
) -> Result<(), ApplyError>
fn try_apply( &mut self, __value_param: &dyn PartialReflect, ) -> 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<Self>) -> ReflectOwned
fn reflect_owned(self: Box<Self>) -> ReflectOwned
Source§fn try_into_reflect(
self: Box<Self>,
) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
fn try_into_reflect( self: Box<Self>, ) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
Source§fn try_as_reflect(&self) -> Option<&dyn Reflect>
fn try_as_reflect(&self) -> Option<&dyn Reflect>
Source§fn try_as_reflect_mut(&mut self) -> Option<&mut dyn Reflect>
fn try_as_reflect_mut(&mut self) -> Option<&mut dyn Reflect>
Source§fn into_partial_reflect(self: Box<Self>) -> Box<dyn PartialReflect>
fn into_partial_reflect(self: Box<Self>) -> Box<dyn PartialReflect>
Source§fn as_partial_reflect(&self) -> &dyn PartialReflect
fn as_partial_reflect(&self) -> &dyn PartialReflect
Source§fn as_partial_reflect_mut(&mut self) -> &mut dyn PartialReflect
fn as_partial_reflect_mut(&mut self) -> &mut dyn PartialReflect
Source§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
Source§fn reflect_partial_eq(&self, value: &dyn PartialReflect) -> Option<bool>
fn reflect_partial_eq(&self, value: &dyn PartialReflect) -> Option<bool>
Source§fn reflect_partial_cmp(&self, value: &dyn PartialReflect) -> Option<Ordering>
fn reflect_partial_cmp(&self, value: &dyn PartialReflect) -> 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
HandleTemplate<T>: Any + Send + Sync,
T: TypePath + Asset,
Handle<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ArcMutexValue<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl<T> Reflect for HandleTemplate<T>where
HandleTemplate<T>: Any + Send + Sync,
T: TypePath + Asset,
Handle<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ArcMutexValue<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn as_any_mut(&mut self) -> &mut dyn Any
fn as_any_mut(&mut self) -> &mut dyn Any
&mut dyn Any. Read moreSource§fn into_reflect(self: Box<Self>) -> Box<dyn Reflect>
fn into_reflect(self: Box<Self>) -> Box<dyn Reflect>
Source§fn as_reflect(&self) -> &dyn Reflect
fn as_reflect(&self) -> &dyn Reflect
Source§fn as_reflect_mut(&mut self) -> &mut dyn Reflect
fn as_reflect_mut(&mut self) -> &mut dyn Reflect
Source§impl<T: Asset> Template for HandleTemplate<T>
impl<T: Asset> Template for HandleTemplate<T>
Source§fn build_template(
&self,
context: &mut TemplateContext<'_, '_>,
) -> Result<Handle<T>>
fn build_template( &self, context: &mut TemplateContext<'_, '_>, ) -> Result<Handle<T>>
entity context to produce a Template::Output.Source§fn clone_template(&self) -> Self
fn clone_template(&self) -> Self
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
HandleTemplate<T>: Any + Send + Sync,
T: TypePath + Asset,
Handle<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ArcMutexValue<T>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl<T> Typed for HandleTemplate<T>where
HandleTemplate<T>: Any + Send + Sync,
T: TypePath + Asset,
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> 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<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> DowncastSend for T
impl<T> DowncastSend 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 more