macro_rules! split_by_comma { ( {$($input:tt)*}, $macro:path $(,$args:tt)* ) => { ... }; ( { , $($rest:tt)* }, { $( {$($prev_split:tt)*} )* }, { $($current_split:tt)* }, $macro:path $(,$args:tt)* ) => { ... }; ( {}, { $( {$($prev_split:tt)*} )* }, { $($current_split:tt)+ }, $macro:path $(,$args:tt)* ) => { ... }; ( { $first:tt $($rest:tt)* }, { $( {$($prev_split:tt)*} )* }, { $($current_split:tt)* }, $macro:path $(,$args:tt)* ) => { ... }; ( {}, { $( {$($prev_split:tt)*} )* }, {}, $macro:path $(,$args:tt)* ) => { ... }; }
Expand description
A macro that splits the input by comma and calls the callback $macro
with the split result.
The each part of the split result is within a bracket, and the callback $macro
can have its
first parameter as {$({$($args:tt)+})*}
to match the split result.
macro_rules! call_split_by_comma {
({$({$($args:tt)+})*}) => {
[$(
stringify! {$($args)+}
),*]
};
($($input:tt)*) => {{
risingwave_jni_core::split_by_comma! {
{$($input)*},
call_split_by_comma
}
}};
}
let expected_result = [
"hello",
"my friend",
];
assert_eq!(expected_result, {call_split_by_comma!(hello, my friend)});