vtui_core/
state.rs

1use std::cell::{Ref, RefMut};
2
3use generational_box::{
4    GenerationalBox, GenerationalRef, GenerationalRefMut, Owner, UnsyncStorage,
5};
6
7#[derive(Default)]
8pub(crate) struct StateOwner {
9    inner: Owner<UnsyncStorage>,
10}
11
12impl StateOwner {
13    pub fn insert<T: 'static>(&self, value: T) -> State<T> {
14        let inner = self.inner.insert(value);
15        State { inner }
16    }
17}
18
19#[derive(Debug)]
20pub struct State<T> {
21    inner: GenerationalBox<T>,
22}
23
24impl<T> Clone for State<T> {
25    fn clone(&self) -> Self {
26        *self
27    }
28}
29
30impl<T> Copy for State<T> {}
31
32impl<T: 'static> State<T> {
33    pub fn read(&self) -> GenerationalRef<Ref<'_, T>> {
34        self.inner.read()
35    }
36
37    pub fn write(&mut self) -> GenerationalRefMut<RefMut<'_, T>> {
38        self.inner.write()
39    }
40}