1use std::{cell::RefCell, rc::Rc};23#[derive(Clone)]4pub struct FutureWrapper<V>(pub Rc<RefCell<Option<V>>>);5impl<T> FutureWrapper<T> {6 pub fn new() -> Self {7 Self(Rc::new(RefCell::new(None)))8 }9 pub fn fill(self, value: T) {10 assert!(self.0.borrow().is_none(), "wrapper is filled already");11 self.0.borrow_mut().replace(value);12 }13}14impl<T: Clone> FutureWrapper<T> {15 pub fn unwrap(&self) -> T {16 self.0.borrow().as_ref().cloned().unwrap()17 }18}1920impl<T> Default for FutureWrapper<T> {21 fn default() -> Self {22 Self::new()23 }24}