Skip to content

Commit d87d6ab

Browse files
committed
node-macro: modernize node macro
1 parent 31e44ab commit d87d6ab

File tree

2 files changed

+6
-19
lines changed

2 files changed

+6
-19
lines changed

node-graph/node-macro/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ mod validation;
1313
#[proc_macro_attribute]
1414
pub fn node(attr: TokenStream, item: TokenStream) -> TokenStream {
1515
// Performs the `node_impl` macro's functionality of attaching an `impl Node for TheGivenStruct` block to the node struct
16-
parsing::new_node_fn(attr.into(), item.into()).into()
16+
parsing::new_node_fn(attr.into(), item.into()).unwrap_or_else(|err| err.to_compile_error()).into()
1717
}
1818

1919
/// Generate meta-information for an enum.
@@ -27,5 +27,5 @@ pub fn node(attr: TokenStream, item: TokenStream) -> TokenStream {
2727
/// Doc comments on a variant become tooltip text.
2828
#[proc_macro_derive(ChoiceType, attributes(widget, menu_separator, label, icon))]
2929
pub fn derive_choice_type(input_item: TokenStream) -> TokenStream {
30-
TokenStream::from(derive_choice_type::derive_choice_type_impl(input_item.into()).unwrap_or_else(|err| err.to_compile_error()))
30+
derive_choice_type::derive_choice_type_impl(input_item.into()).unwrap_or_else(|err| err.to_compile_error()).into()
3131
}

node-graph/node-macro/src/parsing.rs

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -642,24 +642,11 @@ fn extract_attribute<'a>(attrs: &'a [Attribute], name: &str) -> Option<&'a Attri
642642
}
643643

644644
// Modify the new_node_fn function to use the code generation
645-
pub fn new_node_fn(attr: TokenStream2, item: TokenStream2) -> TokenStream2 {
646-
let parse_result = parse_node_fn(attr, item.clone());
647-
let Ok(mut parsed_node) = parse_result else {
648-
let e = parse_result.unwrap_err();
649-
return Error::new(e.span(), format!("Failed to parse node function: {e}")).to_compile_error();
650-
};
651-
645+
pub fn new_node_fn(attr: TokenStream2, item: TokenStream2) -> syn::Result<TokenStream2> {
646+
let mut parsed_node = parse_node_fn(attr, item.clone()).map_err(|e| Error::new(e.span(), format!("Failed to parse node function: {e}")))?;
652647
parsed_node.replace_impl_trait_in_input();
653-
if let Err(e) = crate::validation::validate_node_fn(&parsed_node) {
654-
return Error::new(e.span(), format!("Validation Error:\n{e}")).to_compile_error();
655-
}
656-
match generate_node_code(&parsed_node) {
657-
Ok(parsed) => parsed,
658-
Err(e) => {
659-
// Return the error as a compile error
660-
Error::new(e.span(), format!("Failed to parse node function: {e}")).to_compile_error()
661-
}
662-
}
648+
crate::validation::validate_node_fn(&parsed_node).map_err(|e| Error::new(e.span(), format!("Validation Error: {e}")))?;
649+
generate_node_code(&parsed_node).map_err(|e| Error::new(e.span(), format!("Failed to generate node code: {e}")))
663650
}
664651

665652
impl ParsedNodeFn {

0 commit comments

Comments
 (0)