use std::fmt::Debug;
use bevy::prelude::{Mut, Ref};
use serde::{Deserialize, Serialize};
use serde::de::DeserializeOwned;
use crate::prelude::DetectChanges;
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct WasUpdated<T: Clone + Serialize + Debug>(T, bool);
impl<T: Clone + Serialize + DeserializeOwned + Debug> From<Ref<'_, T>> for WasUpdated<T> {
fn from(value: Ref<T>) -> Self {
let changed = value.is_changed();
Self(value.into_inner().clone(), changed)
}
}
impl<T: Clone + Serialize + DeserializeOwned + Debug> WasUpdated<T> {
pub fn update(&self, mut data: Mut<T>) {
if self.1 {
*data = self.0.clone();
}
}
pub fn data(&self) -> &T {
&self.0
}
}