vtui_core/
state.rs

1use std::cell::{Ref, RefMut};
2
3use generational_box::{
4    AnyStorage, 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 new() -> Self {
14        let inner = UnsyncStorage::owner();
15        Self { inner }
16    }
17
18    pub fn insert<T: 'static>(&self, value: T) -> State<T> {
19        let inner = self.inner.insert(value);
20        State { inner }
21    }
22}
23
24#[derive(Clone, Copy, Debug)]
25pub struct State<T> {
26    inner: GenerationalBox<T>,
27}
28
29impl<T: 'static> State<T> {
30    pub fn read(&self) -> GenerationalRef<Ref<'_, T>> {
31        self.inner.read()
32    }
33
34    pub fn write(&mut self) -> GenerationalRefMut<RefMut<'_, T>> {
35        self.inner.write()
36    }
37}