1use crate::entity::SceneId;
2use crate::store::{Owner, StoreField, Version};
3
4pub struct Value<T> {
5 value: T,
6 version: Version,
7}
8
9impl<T> Value<T> {
10 pub fn new(value: T) -> Self {
11 Self {
12 value,
13 version: Version::default(),
14 }
15 }
16
17 pub fn get(&self) -> &T {
18 &self.value
19 }
20
21 pub fn get_mut(&mut self) -> &mut T {
22 self.version = self.version.bump();
23 &mut self.value
24 }
25
26 pub fn set(&mut self, value: T) {
27 *self.get_mut() = value;
28 }
29
30 pub fn version(&self) -> Version {
31 self.version
32 }
33}
34
35impl<T: Default> Default for Value<T> {
36 fn default() -> Self {
37 Self::new(T::default())
38 }
39}
40
41impl<T: Clone + Send + 'static> StoreField for Value<T> {
42 type Snapshot = T;
43
44 fn bind(&mut self, _scene: SceneId, _owner: Owner) {}
45
46 fn snapshot(&self) -> T {
47 self.value.clone()
48 }
49
50 fn restore(&mut self, from: &T, _scene: SceneId, _owner: Owner) {
51 self.set(from.clone());
52 }
53}