use crate::*;
pub fn create_dynamic_node<F>(mut render_fn: F) -> VirtualNode
where
F: FnMut() -> VirtualNode + 'static,
{
let hook_context: HookContext = create_hook_context();
let mut hook_context_for_closure: HookContext = hook_context;
let inner: Box<RenderFnInner> = Box::new(RenderFnInner {
render_fn: Box::new(move || {
hook_context_for_closure.reset_hook_index();
render_fn()
}),
});
let render_fn_addr: usize = Box::leak(inner) as *mut RenderFnInner as usize;
let dynamic_node: DynamicNode = DynamicNode {
render_fn: render_fn_addr as *mut RenderFnInner,
hook_context,
};
VirtualNode::Dynamic(dynamic_node)
}
pub fn create_dynamic_node_with_context<F>(mut render_fn: F) -> VirtualNode
where
F: FnMut(&mut HookContext) -> VirtualNode + 'static,
{
let hook_context: HookContext = create_hook_context();
let mut hook_context_for_closure: HookContext = hook_context;
let inner: Box<RenderFnInner> = Box::new(RenderFnInner {
render_fn: Box::new(move || {
hook_context_for_closure.reset_hook_index();
render_fn(&mut hook_context_for_closure)
}),
});
let render_fn_addr: usize = Box::leak(inner) as *mut RenderFnInner as usize;
let dynamic_node: DynamicNode = DynamicNode {
render_fn: render_fn_addr as *mut RenderFnInner,
hook_context,
};
VirtualNode::Dynamic(dynamic_node)
}