use std::sync::{RwLock, RwLockReadGuard, RwLockWriteGuard}; use mlua::{UserData, UserDataFields}; pub mod sheetview; #[derive(Debug, Default)] pub struct GlobalState { pub sheetview: sheetview::SheetViewState, } static GLOBAL_STATE: RwLock = RwLock::new(GlobalState::new()); const DUMMY_STATE: GlobalState = GlobalState::new(); impl GlobalState { const fn new() -> Self { Self { sheetview: sheetview::SheetViewState::new() } } pub fn instance() -> RwLockReadGuard<'static, Self> { GLOBAL_STATE.read().unwrap() } pub fn instance_mut() -> RwLockWriteGuard<'static, Self> { GLOBAL_STATE.write().unwrap() } } impl UserData for GlobalState { fn add_fields<'lua, F: UserDataFields<'lua, Self>>(fields: &mut F) { fields.add_field_function_get("sheetview", |_, _| Ok(DUMMY_STATE.sheetview)) } }