use std::sync::{Arc, Mutex};
use multiversx_sc_scenario::api::StaticApi;
thread_local! {
static STATIC_REQUEST_ARC: StaticRequestArcWrapper = StaticRequestArcWrapper::default();
}
#[derive(Clone, Default)]
pub struct StaticRequestArcWrapper {
locker: Arc<Mutex<()>>,
arc: Arc<()>
}
impl Drop for StaticRequestArcWrapper {
fn drop(&mut self) {
let arc_strong_count_after_drop = Arc::strong_count(&self.arc) - 1;
if arc_strong_count_after_drop == 1 {
let guard = self.locker.lock().unwrap(); StaticApi::reset();
drop(guard);
}
}
}
pub fn get_static_request_arc_clone() -> StaticRequestArcWrapper {
STATIC_REQUEST_ARC.with(|e| {
let guard = e.locker.lock().unwrap();
drop(guard);
e.clone()
})
}