agui_primitives/
builder.rs

1use agui_core::{
2    context::WidgetContext,
3    widget::{BuildResult, WidgetBuilder, WidgetRef},
4};
5use agui_macros::Widget;
6
7#[derive(Widget)]
8#[widget(into = false)]
9pub struct Builder<F>
10where
11    F: Fn(&WidgetContext) -> BuildResult + 'static,
12{
13    func: F,
14}
15
16impl<F> std::fmt::Debug for Builder<F>
17where
18    F: Fn(&WidgetContext) -> BuildResult + 'static,
19{
20    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
21        f.debug_struct("Builder").finish()
22    }
23}
24
25impl<F> Builder<F>
26where
27    F: Fn(&WidgetContext) -> BuildResult + 'static,
28{
29    pub fn new(func: F) -> Self {
30        Self { func }
31    }
32}
33
34impl<F> WidgetBuilder for Builder<F>
35where
36    F: Fn(&WidgetContext) -> BuildResult + 'static,
37{
38    fn build(&self, ctx: &WidgetContext) -> BuildResult {
39        (self.func)(ctx)
40    }
41}
42
43impl<F> From<Builder<F>> for WidgetRef
44where
45    F: Fn(&WidgetContext) -> BuildResult + 'static,
46{
47    fn from(builder: Builder<F>) -> Self {
48        Self::new(builder)
49    }
50}