From ad117641b88330aff3d1ba7ced57939df7862659 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Tue, 29 Oct 2024 00:08:41 +0000 Subject: [PATCH] add tuple-apply macro with length argument for now Signed-off-by: Jason Volk --- src/core/utils/mod.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/core/utils/mod.rs b/src/core/utils/mod.rs index 26b0484e..b8640f3a 100644 --- a/src/core/utils/mod.rs +++ b/src/core/utils/mod.rs @@ -53,6 +53,25 @@ macro_rules! extract_variant { }; } +#[macro_export] +macro_rules! apply { + (1, $($idx:tt)+) => { + |t| (($($idx)+)(t.0),) + }; + + (2, $($idx:tt)+) => { + |t| (($($idx)+)(t.0), ($($idx)+)(t.1),) + }; + + (3, $($idx:tt)+) => { + |t| (($($idx)+)(t.0), ($($idx)+)(t.1), ($($idx)+)(t.2),) + }; + + (4, $($idx:tt)+) => { + |t| (($($idx)+)(t.0), ($($idx)+)(t.1), ($($idx)+)(t.2), ($($idx)+4)(t.3)) + }; +} + #[macro_export] macro_rules! at { ($idx:tt) => { @@ -112,6 +131,14 @@ macro_rules! is_not_empty { }; } +/// Functor for equality i.e. (a, b).map(is_equal!()) +#[macro_export] +macro_rules! is_equal { + () => { + |a, b| a == b + }; +} + /// Functor for truthy #[macro_export] macro_rules! is_true {