diff --git a/packages/core-macro/src/lib.rs b/packages/core-macro/src/lib.rs index 67669f873..48fb5c12d 100644 --- a/packages/core-macro/src/lib.rs +++ b/packages/core-macro/src/lib.rs @@ -5,6 +5,7 @@ use syn::parse_macro_input; mod fc; mod htm; mod ifmt; +mod props; mod rsxt; mod util; @@ -59,3 +60,12 @@ pub fn format_args_f(input: TokenStream) -> TokenStream { .unwrap_or_else(|err| err.to_compile_error()) .into() } + +#[proc_macro_derive(Props, attributes(builder))] +pub fn derive_typed_builder(input: proc_macro::TokenStream) -> proc_macro::TokenStream { + let input = parse_macro_input!(input as syn::DeriveInput); + match props::impl_my_derive(&input) { + Ok(output) => output.into(), + Err(error) => error.to_compile_error().into(), + } +} diff --git a/packages/core-macro/src/props/mod.rs b/packages/core-macro/src/props/mod.rs new file mode 100644 index 000000000..af7497394 --- /dev/null +++ b/packages/core-macro/src/props/mod.rs @@ -0,0 +1,1198 @@ +//! This code mostly comes from idanarye/rust-typed-builder +//! +//! However, it has been adopted to fit the Dioxus Props builder pattern. +//! +//! For dioxus, we make a few changes: +//! - automatically implement Into