use std::{cell::RefCell, rc::Rc};
use crate::ContextRequest;
use super::CallContextStackTrace;
pub struct ArmaContextManager {
pub(crate) request: RefCell<ContextRequest>,
state: Rc<RefCell<Option<CallContextStackTrace>>>,
}
impl ArmaContextManager {
pub fn new(request: ContextRequest) -> Self {
Self {
request: RefCell::new(request),
state: Rc::new(RefCell::new(None)),
}
}
pub fn request(&self) -> CallContextStackTrace {
unsafe {
(self.request.borrow())();
}
self.state.replace(None).unwrap_or_default()
}
pub fn replace(&self, value: Option<CallContextStackTrace>) {
*self.state.borrow_mut() = value;
}
}