agui_primitives/
builder.rs1use 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}