scsys_core/state/
interface.rs

1/*
2    Appellation: state <module>
3    Contrib: FL03 <jo3mccain@icloud.com>
4*/
5use core::marker::PhantomData;
6
7/// [State] is an abstract object that allows a particular _kind_ of state to be associated
8/// with some data.
9#[derive(Clone, Copy, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
10#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
11pub struct State<K, V> {
12    pub(crate) data: V,
13    pub(crate) _state: PhantomData<K>,
14}
15
16impl<K, V> State<K, V> {
17    pub fn new(data: V) -> Self {
18        Self {
19            data,
20            _state: PhantomData::<K>,
21        }
22    }
23
24    pub fn data(&self) -> &V {
25        &self.data
26    }
27
28    pub fn is_state<R: 'static>(&self) -> bool
29    where
30        K: 'static,
31    {
32        use core::any::TypeId;
33        TypeId::of::<PhantomData<K>>() == TypeId::of::<PhantomData<R>>()
34    }
35}