use crate::TreeBuilder;
pub struct DeferredFn<F: Fn(TreeBuilder) -> ()> {
tree: Option<TreeBuilder>,
action: Option<F>,
}
impl<F> DeferredFn<F>
where
F: Fn(TreeBuilder) -> (),
{
pub fn new(tree: TreeBuilder, action: F) -> Self {
DeferredFn {
tree: Some(tree),
action: Some(action),
}
}
pub fn none() -> Self {
DeferredFn {
tree: None,
action: None,
}
}
pub fn cancel(&mut self) {
self.tree = None;
self.action = None;
}
}
impl<F> Drop for DeferredFn<F>
where
F: Fn(TreeBuilder) -> (),
{
fn drop(&mut self) {
if let (Some(x), Some(action)) = (&self.tree, &self.action) {
action(x.clone());
}
}
}