1use crate::{
2 adapter::AdapterElement,
3 element::{AnyElement, Element},
4};
5use gpui::ViewContext;
6
7pub fn view<F, E>(mut render: F) -> ViewFn
8where
9 F: 'static + FnMut(&mut ViewContext<ViewFn>) -> E,
10 E: Element<ViewFn>,
11{
12 ViewFn(Box::new(move |cx| (render)(cx).into_any()))
13}
14
15pub struct ViewFn(Box<dyn FnMut(&mut ViewContext<ViewFn>) -> AnyElement<ViewFn>>);
16
17impl gpui::Entity for ViewFn {
18 type Event = ();
19}
20
21impl gpui::View for ViewFn {
22 fn render(&mut self, cx: &mut ViewContext<Self>) -> gpui::AnyElement<Self> {
23 use gpui::Element as _;
24 AdapterElement((self.0)(cx)).into_any()
25 }
26}