#[allow(warnings)]
pub mod state {
use std::{
borrow::BorrowMut,
cell::RefCell,
};
#[derive(Debug, PartialEq, Clone)]
pub struct State<T> {
pub data: Box<RefCell<Option<T>>>,
}
impl<T> State<T> {
pub fn new()->Self{
use std::ptr::NonNull;
let ptr = NonNull::<T>::dangling();
Self { data: Box::new(RefCell::new(None)) }
}
pub fn set_state(&self, val: T) {
self.data.swap(&RefCell::new(Some(val)));
}
pub fn get_state(&self) -> T {
let state = self.clone().to_owned();
let data = state.data.as_ptr();
unsafe { data.read().expect("get some error") }
}
}
}