pub struct Anims<'a> { /* private fields */ }
Expand description
Animations of a Model https://stereokit.net/Pages/StereoKit/ModelAnimCollection.html
see also Model::get_anims
§Examples
use stereokit_rust::{maths::{Vec3, Matrix}, model::{Model, Anims, AnimMode}};
let model = Model::from_file("center.glb", None)
.expect("Could not load model").copy();
let transform = Matrix::t_r_s(Vec3::NEG_Y * 0.40, [0.0, 190.0, 0.0], Vec3::ONE * 0.25);
let mut anims = model.get_anims();
assert_eq!(anims.get_count(), 1);
anims.play_anim("SuzanneAction", AnimMode::Manual).anim_completion(0.80);
for (iter, anim) in anims.enumerate() {
match iter {
0 => assert_eq!(anim.name, "SuzanneAction"),
_ => panic!("Unexpected animation name"),
}
}
let mut anims = model.get_anims();
filename_scr = "screenshots/anims.jpeg";
test_screenshot!( // !!!! Get a proper main loop !!!!
model.draw(token, transform, None, None);
);


Implementations§
Source§impl<'a> Anims<'a>
impl<'a> Anims<'a>
Sourcepub fn get_name_at_index(&self, index: i32) -> Option<&str>
pub fn get_name_at_index(&self, index: i32) -> Option<&str>
Get the name of the animation at given index
see also model_anim_get_name
§Examples
use stereokit_rust::{model::{Model, Anims, AnimMode}, system::Assets};
let model = Model::from_file("mobiles.gltf", None)
.expect("Could not load model").copy();
Assets::block_for_priority(i32::MAX);
let mut anims = model.get_anims();
assert_eq!(anims.get_count(), 3);
assert_eq!(anims.get_name_at_index(0), Some("rotate"));
assert_eq!(anims.get_name_at_index(1), Some("flyRotate"));
assert_eq!(anims.get_name_at_index(2), Some("fly"));
assert_eq!(anims.get_name_at_index(3), None);
Sourcepub fn get_duration_at_index(&self, index: i32) -> f32
pub fn get_duration_at_index(&self, index: i32) -> f32
Get the duration of the animation at given index
Returns -0.01
if the index is out of bounds.
see also model_anim_get_duration
§Examples
use stereokit_rust::model::{Model, Anims, AnimMode};
let model = Model::from_file("center.glb", None)
.expect("Could not load model").copy();
let mut anims = model.get_anims();
assert_eq!(anims.get_count(), 1);
assert_eq!(anims.get_duration_at_index(0), 2.5);
assert_eq!(anims.get_duration_at_index(1), -0.01);
Sourcepub fn step_anim(&mut self) -> &mut Self
pub fn step_anim(&mut self) -> &mut Self
Calling Draw will automatically step the Model’s animation, but if you don’t draw the Model, or need access to the animated nodes before drawing, then you can step the animation early manually via this method. Animation will only ever be stepped once per frame, so it’s okay to call this multiple times, or in addition to Draw. https://stereokit.net/Pages/StereoKit/Model/StepAnim.html
see also model_step_anim
model_play_anim
§Examples
use stereokit_rust::{maths::{Vec3, Matrix}, model::{Model, Anims, AnimMode}};
let model = Model::from_file("center.glb", None)
.expect("Could not load model").copy();
let mut anims = model.get_anims();
assert_eq!(anims.get_count(), 1);
anims.play_anim("SuzanneAction", AnimMode::Loop);
number_of_steps = 20;
test_steps!( // !!!! Get a proper main loop !!!!
if iter % 10 < 5 {
model.draw(token, Matrix::IDENTITY, None, None);
} else {
anims.step_anim();
}
);
Sourcepub fn play_anim(
&mut self,
animation_name: impl AsRef<str>,
mode: AnimMode,
) -> &mut Self
pub fn play_anim( &mut self, animation_name: impl AsRef<str>, mode: AnimMode, ) -> &mut Self
Searches for an animation with the given name, and if it’s found, sets it up as the active animation and begins laying it with the animation mode. https://stereokit.net/Pages/StereoKit/Model/PlayAnim.html
name
- The name of the animation to play. Case sensitive.mode
- The animation mode to use.
see also model_play_anim
Anims::play_anim_idx
§Examples
use stereokit_rust::model::{Model, Anims, AnimMode};
let model = Model::from_file("center.glb", None)
.expect("Could not load model").copy();
let mut anims = model.get_anims();
anims.play_anim("SuzanneAction", AnimMode::Loop);
assert_eq!(anims.get_anim_mode(), AnimMode::Loop);
anims.play_anim("SuzanneAction", AnimMode::Once);
assert_eq!(anims.get_anim_mode(), AnimMode::Once);
anims.play_anim("SuzanneAction", AnimMode::Manual);
assert_eq!(anims.get_anim_mode(), AnimMode::Manual);
// If anim does not exist:
anims.play_anim("Not exist", AnimMode::Manual);
assert_eq!(anims.get_anim_mode(), AnimMode::Manual);
Sourcepub fn play_anim_idx(&mut self, idx: i32, mode: AnimMode) -> &mut Self
pub fn play_anim_idx(&mut self, idx: i32, mode: AnimMode) -> &mut Self
Sets it up the animation at index idx as the active animation and begins playing it with the animation mode. https://stereokit.net/Pages/StereoKit/Model/PlayAnim.html
idx
- index of the animation to playmode
- animation mode to play the animation with
see also model_play_anim_idx
Anims::play_anim
§Examples
use stereokit_rust::model::{Model, Anims, AnimMode};
let model = Model::from_file("center.glb", None)
.expect("Could not load model").copy();
let mut anims = model.get_anims();
anims.play_anim_idx(0, AnimMode::Loop);
assert_eq!(anims.get_anim_mode(), AnimMode::Loop);
anims.play_anim_idx(0, AnimMode::Once);
assert_eq!(anims.get_anim_mode(), AnimMode::Once);
// If index does not exist:
anims.play_anim_idx(102, AnimMode::Manual);
assert_eq!(anims.get_anim_mode(), AnimMode::Once);
Sourcepub fn anim_time(&mut self, time: f32) -> &mut Self
pub fn anim_time(&mut self, time: f32) -> &mut Self
Set the current time of the active animation in seconds, from the start of the animation. This may be a value superior to the animation’s Duration if the animation is a loop. For a percentage of completion, see anim_completion instead. https://stereokit.net/Pages/StereoKit/Model/AnimTime.html
see also model_set_anim_time
Anims::anim_completion
§Examples
use stereokit_rust::model::{Model, Anims, AnimMode};
let model = Model::from_file("center.glb", None)
.expect("Could not load model").copy();
let mut anims = model.get_anims();
anims.play_anim_idx(0, AnimMode::Manual);
assert_eq!(anims.get_duration_at_index(0), 2.5);
anims.anim_time(1.0);
assert_eq!(anims.get_anim_completion(), 0.4);
anims.anim_time(2.0);
assert_eq!(anims.get_anim_completion(), 0.8);
// if the asking for animation longer than the duration (AnimMode::Manual):
anims.anim_time(4.0);
assert_eq!(anims.get_anim_completion(), 1.0);
anims.play_anim_idx(0, AnimMode::Loop);
// if the asking for animation longer than the duration (AnimMode::Loop):
anims.anim_time(4.0);
assert_eq!(anims.get_anim_completion(), 0.6);
Sourcepub fn anim_completion(&mut self, percent: f32) -> &mut Self
pub fn anim_completion(&mut self, percent: f32) -> &mut Self
This set the percentage of completion of the active animation. This may be a value superior to 1.0 if the animation is a loop. https://stereokit.net/Pages/StereoKit/Model/AnimCompletion.html
see also model_set_anim_completion
Anims::anim_time
§Examples
use stereokit_rust::model::{Model, Anims, AnimMode};
let model = Model::from_file("center.glb", None)
.expect("Could not load model").copy();
let mut anims = model.get_anims();
anims.play_anim_idx(0, AnimMode::Manual);
assert_eq!(anims.get_duration_at_index(0), 2.5);
anims.anim_completion(0.4);
assert_eq!(anims.get_anim_time(), 1.0);
anims.anim_completion(0.8);
assert_eq!(anims.get_anim_time(), 2.0);
// If asking for a completion over 100% (AnimMode::Manual):
anims.anim_completion(1.8);
assert_eq!(anims.get_anim_time(), 2.5);
anims.play_anim_idx(0, AnimMode::Loop);
// if the asking for a completion over 100% (AnimMode::Loop):
anims.anim_completion(1.8);
assert_eq!(anims.get_anim_time(), 2.0);
Sourcepub fn find_anim<S: AsRef<str>>(&self, name: S) -> Option<i32>
pub fn find_anim<S: AsRef<str>>(&self, name: S) -> Option<i32>
get anim by name https://stereokit.net/Pages/StereoKit/Model/FindAnim.html
see also model_anim_find
Anims::play_anim
`Anims::play_anim_idx
§Examples
use stereokit_rust::model::{Model, Anims};
let model = Model::from_file("center.glb", None)
.expect("Could not load model")
.copy();
let anims = model.get_anims();
assert_eq!(anims.find_anim("SuzanneAction"), Some(0));
assert_eq!(anims.find_anim("Not exist"), None);
Sourcepub fn get_count(&self) -> i32
pub fn get_count(&self) -> i32
Get the number of animations https://stereokit.net/Pages/StereoKit/Model/ModelAnimCollection.html
see also model_anim_count
§Examples
use stereokit_rust::model::{Model};
let model = Model::from_file("mobiles.gltf", None)
.expect("Could not load model").copy();
let count = model.get_anims().get_count();
assert_eq!(count, 3);
Sourcepub fn get_active_anim(&self) -> i32
pub fn get_active_anim(&self) -> i32
Get the current animation https://stereokit.net/Pages/StereoKit/Model/ActiveAnim.html
see also model_anim_active
Anims::play_anim
Anims::play_anim_idx
§Examples
use stereokit_rust::model::{Model, AnimMode};
let model = Model::from_file("mobiles.gltf", None)
.expect("Could not load model").copy();
let mut anims = model.get_anims();
assert_eq!(anims.get_active_anim(), -1);
anims.play_anim("flyRotate", AnimMode::Loop);
assert_eq!(anims.get_active_anim(), 1);
Sourcepub fn get_anim_mode(&self) -> AnimMode
pub fn get_anim_mode(&self) -> AnimMode
Get the current animation, mode https://stereokit.net/Pages/StereoKit/Model/AnimMode.html
see also model_anim_active_mode
Anims::play_anim
Anims::play_anim_idx
§Examples
use stereokit_rust::model::{Model, AnimMode};
let model = Model::from_file("mobiles.gltf", None)
.expect("Could not load model").copy();
let mut anims = model.get_anims();
assert_eq!(anims.get_anim_mode(), AnimMode::Loop);
anims.play_anim("flyRotate", AnimMode::Once);
assert_eq!(anims.get_anim_mode(), AnimMode::Once);
anims.play_anim("fly", AnimMode::Manual);
assert_eq!(anims.get_anim_mode(), AnimMode::Manual);
Sourcepub fn get_anim_time(&self) -> f32
pub fn get_anim_time(&self) -> f32
Get the current animation duration https://stereokit.net/Pages/StereoKit/Model/AnimTime.html
see also model_anim_active_time
Anims::anim_time
Anims::anim_completion
§Examples
use stereokit_rust::model::{Model, AnimMode};
let model = Model::from_file("center.glb", None)
.expect("Could not load model").copy();
let mut anims = model.get_anims();
assert_eq!(anims.get_anim_time(), 0.0);
anims.play_anim("SuzanneAction", AnimMode::Loop ).anim_completion(0.5);
assert_eq!(anims.get_anim_time(), 1.25);
Sourcepub fn get_anim_completion(&self) -> f32
pub fn get_anim_completion(&self) -> f32
Get the current animation completion % https://stereokit.net/Pages/StereoKit/Model/AnimCompletion.html
see also model_anim_active_completion
Anims::anim_time
Anims::anim_completion
§Examples
use stereokit_rust::model::{Model, AnimMode};
let model = Model::from_file("center.glb", None)
.expect("Could not load model").copy();
let mut anims = model.get_anims();
assert_eq!(anims.get_anim_completion(), 0.0);
anims.play_anim("SuzanneAction", AnimMode::Loop);
anims.anim_time(0.5);
assert_eq!(anims.get_anim_completion(), 0.2);
Trait Implementations§
Source§impl Iterator for Anims<'_>
impl Iterator for Anims<'_>
Source§fn next(&mut self) -> Option<Self::Item>
fn next(&mut self) -> Option<Self::Item>
Source§fn next_chunk<const N: usize>(
&mut self,
) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where
Self: Sized,
fn next_chunk<const N: usize>(
&mut self,
) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where
Self: Sized,
iter_next_chunk
)N
values. Read more1.0.0 · Source§fn size_hint(&self) -> (usize, Option<usize>)
fn size_hint(&self) -> (usize, Option<usize>)
1.0.0 · Source§fn count(self) -> usizewhere
Self: Sized,
fn count(self) -> usizewhere
Self: Sized,
1.0.0 · Source§fn last(self) -> Option<Self::Item>where
Self: Sized,
fn last(self) -> Option<Self::Item>where
Self: Sized,
Source§fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>
fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>
iter_advance_by
)n
elements. Read more1.0.0 · Source§fn nth(&mut self, n: usize) -> Option<Self::Item>
fn nth(&mut self, n: usize) -> Option<Self::Item>
n
th element of the iterator. Read more1.28.0 · Source§fn step_by(self, step: usize) -> StepBy<Self>where
Self: Sized,
fn step_by(self, step: usize) -> StepBy<Self>where
Self: Sized,
1.0.0 · Source§fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>
fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>
1.0.0 · Source§fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where
Self: Sized,
U: IntoIterator,
fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where
Self: Sized,
U: IntoIterator,
Source§fn intersperse(self, separator: Self::Item) -> Intersperse<Self>
fn intersperse(self, separator: Self::Item) -> Intersperse<Self>
iter_intersperse
)separator
between adjacent
items of the original iterator. Read moreSource§fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
iter_intersperse
)separator
between adjacent items of the original iterator. Read more1.0.0 · Source§fn map<B, F>(self, f: F) -> Map<Self, F>
fn map<B, F>(self, f: F) -> Map<Self, F>
1.0.0 · Source§fn filter<P>(self, predicate: P) -> Filter<Self, P>
fn filter<P>(self, predicate: P) -> Filter<Self, P>
1.0.0 · Source§fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>
fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>
1.0.0 · Source§fn enumerate(self) -> Enumerate<Self>where
Self: Sized,
fn enumerate(self) -> Enumerate<Self>where
Self: Sized,
1.0.0 · Source§fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
1.0.0 · Source§fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
1.57.0 · Source§fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>
fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>
1.0.0 · Source§fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
n
elements. Read more1.0.0 · Source§fn take(self, n: usize) -> Take<Self>where
Self: Sized,
fn take(self, n: usize) -> Take<Self>where
Self: Sized,
n
elements, or fewer
if the underlying iterator ends sooner. Read more1.0.0 · Source§fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
Source§fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
iter_map_windows
)f
for each contiguous window of size N
over
self
and returns an iterator over the outputs of f
. Like slice::windows()
,
the windows during mapping overlap as well. Read more1.0.0 · Source§fn inspect<F>(self, f: F) -> Inspect<Self, F>
fn inspect<F>(self, f: F) -> Inspect<Self, F>
1.0.0 · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Iterator
. Read moreSource§fn collect_into<E>(self, collection: &mut E) -> &mut E
fn collect_into<E>(self, collection: &mut E) -> &mut E
iter_collect_into
)1.0.0 · Source§fn partition<B, F>(self, f: F) -> (B, B)
fn partition<B, F>(self, f: F) -> (B, B)
Source§fn is_partitioned<P>(self, predicate: P) -> bool
fn is_partitioned<P>(self, predicate: P) -> bool
iter_is_partitioned
)true
precede all those that return false
. Read more1.27.0 · Source§fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
1.27.0 · Source§fn try_for_each<F, R>(&mut self, f: F) -> R
fn try_for_each<F, R>(&mut self, f: F) -> R
1.0.0 · Source§fn fold<B, F>(self, init: B, f: F) -> B
fn fold<B, F>(self, init: B, f: F) -> B
1.51.0 · Source§fn reduce<F>(self, f: F) -> Option<Self::Item>
fn reduce<F>(self, f: F) -> Option<Self::Item>
Source§fn try_reduce<R>(
&mut self,
f: impl FnMut(Self::Item, Self::Item) -> R,
) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
fn try_reduce<R>( &mut self, f: impl FnMut(Self::Item, Self::Item) -> R, ) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
iterator_try_reduce
)1.0.0 · Source§fn all<F>(&mut self, f: F) -> bool
fn all<F>(&mut self, f: F) -> bool
1.0.0 · Source§fn any<F>(&mut self, f: F) -> bool
fn any<F>(&mut self, f: F) -> bool
1.0.0 · Source§fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
1.30.0 · Source§fn find_map<B, F>(&mut self, f: F) -> Option<B>
fn find_map<B, F>(&mut self, f: F) -> Option<B>
Source§fn try_find<R>(
&mut self,
f: impl FnMut(&Self::Item) -> R,
) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
fn try_find<R>( &mut self, f: impl FnMut(&Self::Item) -> R, ) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
try_find
)1.0.0 · Source§fn position<P>(&mut self, predicate: P) -> Option<usize>
fn position<P>(&mut self, predicate: P) -> Option<usize>
1.6.0 · Source§fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
1.15.0 · Source§fn max_by<F>(self, compare: F) -> Option<Self::Item>
fn max_by<F>(self, compare: F) -> Option<Self::Item>
1.6.0 · Source§fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
1.15.0 · Source§fn min_by<F>(self, compare: F) -> Option<Self::Item>
fn min_by<F>(self, compare: F) -> Option<Self::Item>
1.0.0 · Source§fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
1.36.0 · Source§fn copied<'a, T>(self) -> Copied<Self>
fn copied<'a, T>(self) -> Copied<Self>
Source§fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where
Self: Sized,
fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where
Self: Sized,
iter_array_chunks
)N
elements of the iterator at a time. Read more1.11.0 · Source§fn product<P>(self) -> P
fn product<P>(self) -> P
Source§fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
iter_order_by
)Iterator
with those
of another with respect to the specified comparison function. Read more1.5.0 · Source§fn partial_cmp<I>(self, other: I) -> Option<Ordering>
fn partial_cmp<I>(self, other: I) -> Option<Ordering>
PartialOrd
elements of
this Iterator
with those of another. The comparison works like short-circuit
evaluation, returning a result without comparing the remaining elements.
As soon as an order can be determined, the evaluation stops and a result is returned. Read moreSource§fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where
Self: Sized,
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where
Self: Sized,
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
iter_order_by
)Iterator
with those
of another with respect to the specified comparison function. Read moreSource§fn eq_by<I, F>(self, other: I, eq: F) -> bool
fn eq_by<I, F>(self, other: I, eq: F) -> bool
iter_order_by
)1.5.0 · Source§fn lt<I>(self, other: I) -> bool
fn lt<I>(self, other: I) -> bool
Iterator
are lexicographically
less than those of another. Read more1.5.0 · Source§fn le<I>(self, other: I) -> bool
fn le<I>(self, other: I) -> bool
Iterator
are lexicographically
less or equal to those of another. Read more1.5.0 · Source§fn gt<I>(self, other: I) -> bool
fn gt<I>(self, other: I) -> bool
Iterator
are lexicographically
greater than those of another. Read more1.5.0 · Source§fn ge<I>(self, other: I) -> bool
fn ge<I>(self, other: I) -> bool
Iterator
are lexicographically
greater than or equal to those of another. Read more1.82.0 · Source§fn is_sorted_by<F>(self, compare: F) -> bool
fn is_sorted_by<F>(self, compare: F) -> bool
1.82.0 · Source§fn is_sorted_by_key<F, K>(self, f: F) -> bool
fn is_sorted_by_key<F, K>(self, f: F) -> bool
Auto Trait Implementations§
impl<'a> Freeze for Anims<'a>
impl<'a> RefUnwindSafe for Anims<'a>
impl<'a> !Send for Anims<'a>
impl<'a> !Sync for Anims<'a>
impl<'a> Unpin for Anims<'a>
impl<'a> UnwindSafe for Anims<'a>
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>
. 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.