Hello fellow rusters.
I am writing a macro, that uses a set of helper functions.
fn eq<T: PartialEq>(l: T, r: T) -> bool {l == r}
fn ne<T: PartialEq>(l: T, r: T) -> bool {l != r}
fn gt<T: PartialOrd>(l: T, r: T) -> bool {l > r}
fn lt<T: PartialOrd>(l: T, r: T) -> bool {l < r}
fn ge<T: PartialOrd>(l: T, r: T) -> bool {l >= r}
fn le<T: PartialOrd>(l: T, r: T) -> bool {l <= r}
macro_rules! test_member_op {
($val:expr, $var:path, $member_name:tt == $member_val:expr) => {
test_member_op!($val, $var, $member_name, eq, $member_val)
};
($val:expr, $var:path, $member_name:tt != $member_val:expr) => {
test_member_op!($val, $var, $member_name, ne, $member_val)
};
// more options removed for brevity
($val:expr, $var:path, $member_name:tt, $op:tt, $member_val:expr) => {
if let $var { $member_name, .. } = &$val {
$op(*$member_name, $member_val)
} else {
false
}
};
}
It all works well when testing within the file that holds the macro. But when I try to use it, in the use site (in another file), I get an error saying eq is not found in this scope.
I understand why (the macro gets expanded "in place"), but not sure how to solve this in a generic way. Can someone help out?
Thanks!