Implement MutUntyped::from(mut_typed) (#12406)

# Objective

Allow to create MutUntyped<'a> instance from Mut<'a, T>.
Fixes #12405

## Solution

Added impl<'a, T> From<Mut<'a, T>> for MutUntyped<'>
This commit is contained in:
Yasha Borevich 2024-03-10 13:46:50 +01:00 committed by GitHub
parent aea9b4a9e4
commit f0a98645d0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -938,6 +938,15 @@ impl std::fmt::Debug for MutUntyped<'_> {
}
}
impl<'w, T> From<Mut<'w, T>> for MutUntyped<'w> {
fn from(value: Mut<'w, T>) -> Self {
MutUntyped {
value: value.value.into(),
ticks: value.ticks,
}
}
}
#[cfg(test)]
mod tests {
use bevy_ecs_macros::Resource;
@ -1254,4 +1263,29 @@ mod tests {
assert!(new.is_changed());
}
#[test]
fn mut_untyped_from_mut() {
let mut component_ticks = ComponentTicks {
added: Tick::new(1),
changed: Tick::new(2),
};
let ticks = TicksMut {
added: &mut component_ticks.added,
changed: &mut component_ticks.changed,
last_run: Tick::new(3),
this_run: Tick::new(4),
};
let mut c = C {};
let mut_typed = Mut {
value: &mut c,
ticks,
};
let into_mut: MutUntyped = mut_typed.into();
assert_eq!(1, into_mut.ticks.added.get());
assert_eq!(2, into_mut.ticks.changed.get());
assert_eq!(3, into_mut.ticks.last_run.get());
assert_eq!(4, into_mut.ticks.this_run.get());
}
}