From a11bca58609d576c9af6efc2f18e43b183b23189 Mon Sep 17 00:00:00 2001 From: Leo dev Date: Sat, 11 Jan 2025 23:58:53 +0100 Subject: [PATCH] better functions --- src/main.rs | 2 +- src/rsx.rs | 64 +++++++++++++++++++++++++++-------------------------- 2 files changed, 34 insertions(+), 32 deletions(-) diff --git a/src/main.rs b/src/main.rs index 1b4fdd6..d1bc0d0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,7 +10,7 @@ fn App() { rsx! { %text { "Hello" } - button { on_click: fn (_, _, _) @count { + button { on_click: |_, _, _| @count { count += 1 }, "World: {count}" } } diff --git a/src/rsx.rs b/src/rsx.rs index 7d1b251..a49eda3 100644 --- a/src/rsx.rs +++ b/src/rsx.rs @@ -12,6 +12,35 @@ macro_rules! check_expr { } #[macro_export] macro_rules! parse_rsx_param { + //// FUNCTIONS + + ($elem:expr, $($k:ident).+: fn($($params:tt)*) $(@$($v:ident),+)? $body:expr $(, $($rest:tt)*)?) => { + $elem.$($k).+ = $crate::Handler::new({ + $($( + #[allow(unused_mut)] + let mut $v = $v.clone(); + )+)? + move |$($params)*| { + $body + } + }); + osui::parse_rsx_param!($elem, $($($rest)*)?); + }; + + ($elem:expr, $($k:ident).+: |$($args:tt $(: $aty:ty)?),*| $(@$($v:ident),+)? $body:expr $(, $($rest:tt)*)?) => { + $elem.$($k).+ = $crate::Handler::new({ + $($( + #[allow(unused_mut)] + let mut $v = $v.clone(); + )+)? + move |$($args $(: $aty)?),*| $body + }); + osui::parse_rsx_param!($elem, $($($rest)*)?); + }; + + //// FUNCTIONS END + + ($elem:expr, async $code:block $($rest:tt)*) => { let elem_len = $elem.children.len(); $elem.instructions.push($crate::Instruction::Load(Handler::new( @@ -55,45 +84,18 @@ macro_rules! parse_rsx_param { osui::parse_rsx_param!($elem, $($rest)*); }; - //// FUNCTIONS - - ($elem:expr, $($k:ident).+: fn($($params:tt)*) $(@$($v:ident),+)? $code:block $(, $($rest:tt)*)?) => { - $elem.$($k).+ = $crate::Handler::new({ - $($( - #[allow(unused_mut)] - let mut $v = $v.clone(); - )+)? - move |$($params)*| { - $code - } - }); - osui::parse_rsx_param!($elem, $($($rest)*)?); - }; - - //// FUNCTIONS END - ($elem:expr, $($k:ident).+: $v:expr $(, $($rest:tt)*)?) => { $elem.$($k).+ = $crate::check_expr!($v); osui::parse_rsx_param!($elem, $($($rest)*)?); }; + ($elem:expr, $p:path) => { $p; }; - ($elem:expr, $($k:ident).+, $($rest:tt)*) => { - $elem.$($k).+ = true; - osui::parse_rsx_param!($elem, $($rest)*); - }; - ($elem:expr, $($k:ident).+., $($rest:tt)*) => { - $elem.$($k).+.; - osui::parse_rsx_param!($elem, $($rest)*); - }; - ($elem:expr, $($k:ident).+.: $v:expr) => { - $elem.$($k).+. = $crate::check_expr!($v); - }; - ($elem:expr, $($k:ident).+.: $v:expr, $(, $($rest:tt)*)?) => { - $elem.$($k).+. = $crate::check_expr!($v); - osui::parse_rsx_param!($elem, $($($rest)*)?); + ($elem:expr, $($k:ident).+, $($rest:tt)*) => { + $elem.$($k).+ = !$elem.$($k).+; + osui::parse_rsx_param!($elem, $($rest)*); }; ($elem:expr, $code:block $($rest:tt)*) => {