better functions

This commit is contained in:
2025-01-11 23:58:53 +01:00
parent d4d4108714
commit a11bca5860
2 changed files with 34 additions and 32 deletions
+1 -1
View File
@@ -10,7 +10,7 @@ fn App() {
rsx! { rsx! {
%text { "Hello" } %text { "Hello" }
button { on_click: fn (_, _, _) @count { button { on_click: |_, _, _| @count {
count += 1 count += 1
}, "World: {count}" } }, "World: {count}" }
} }
+33 -31
View File
@@ -12,6 +12,35 @@ macro_rules! check_expr {
} }
#[macro_export] #[macro_export]
macro_rules! parse_rsx_param { 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)*) => { ($elem:expr, async $code:block $($rest:tt)*) => {
let elem_len = $elem.children.len(); let elem_len = $elem.children.len();
$elem.instructions.push($crate::Instruction::Load(Handler::new( $elem.instructions.push($crate::Instruction::Load(Handler::new(
@@ -55,45 +84,18 @@ macro_rules! parse_rsx_param {
osui::parse_rsx_param!($elem, $($rest)*); 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:expr, $($k:ident).+: $v:expr $(, $($rest:tt)*)?) => {
$elem.$($k).+ = $crate::check_expr!($v); $elem.$($k).+ = $crate::check_expr!($v);
osui::parse_rsx_param!($elem, $($($rest)*)?); osui::parse_rsx_param!($elem, $($($rest)*)?);
}; };
($elem:expr, $p:path) => { ($elem:expr, $p:path) => {
$p; $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:expr, $($k:ident).+, $($rest:tt)*) => {
$elem.$($k).+. = $crate::check_expr!($v); $elem.$($k).+ = !$elem.$($k).+;
}; osui::parse_rsx_param!($elem, $($rest)*);
($elem:expr, $($k:ident).+.: $v:expr, $(, $($rest:tt)*)?) => {
$elem.$($k).+. = $crate::check_expr!($v);
osui::parse_rsx_param!($elem, $($($rest)*)?);
}; };
($elem:expr, $code:block $($rest:tt)*) => { ($elem:expr, $code:block $($rest:tt)*) => {