From 7158bc3575e180dbe8641549b040e74ae3baf80b Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Tue, 9 Mar 2021 00:58:20 -0500 Subject: [PATCH] Feat: revert FC changes (like the old style). This commit reverts to the old style of props + FC. The old style is desirable because people comfortable with react can automatically be comfortable with dioxus. It's also nice in that the same props can be used to drive two different components - something the trait version couldn't do. Now, our trait bound forces implementations to have the #[derive(Props)] flag. This will need to implement the Properties trait as well as PartialEq (using ptr::equal for closure fields). --- packages/core-macro/src/lib.rs | 10 + packages/core-macro/src/props/mod.rs | 1198 ++++++++++++++++++++++++++ packages/core-macro/src/rsxt.rs | 19 +- packages/core/examples/borrowed.rs | 35 +- packages/core/examples/fc.rs | 6 +- packages/core/examples/props.rs | 38 +- packages/core/examples/step.rs | 19 +- packages/core/src/component.rs | 90 +- packages/core/src/context.rs | 2 +- packages/core/src/debug_renderer.rs | 3 +- packages/core/src/lib.rs | 9 +- packages/core/src/nodebuilder.rs | 8 +- packages/core/src/nodes.rs | 7 +- packages/core/src/scope.rs | 21 +- packages/core/src/virtual_dom.rs | 11 +- 15 files changed, 1339 insertions(+), 137 deletions(-) create mode 100644 packages/core-macro/src/props/mod.rs 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