const LIST_LAMBDA_NAMES: [&str; 7] = [
"list_filter",
"list_extract",
"list_transform",
"list_reduce",
"list_any",
"list_all",
"list_single",
];
pub fn is_list_lambda(name: &str) -> bool {
LIST_LAMBDA_NAMES.contains(&name.to_lowercase().as_str())
}
pub fn list_lambda_arg_index(name: &str) -> Option<usize> {
if is_list_lambda(name) {
Some(1)
} else {
None
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn known_lambdas_match_case_insensitively() {
assert!(is_list_lambda("list_filter"));
assert!(is_list_lambda("LIST_TRANSFORM"));
assert!(is_list_lambda("List_Extract"));
assert!(is_list_lambda("list_reduce"));
assert!(is_list_lambda("list_any"));
assert!(is_list_lambda("LIST_ALL"));
assert!(is_list_lambda("List_Single"));
}
#[test]
fn eager_functions_do_not_match() {
assert!(!is_list_lambda("list_append"));
assert!(!is_list_lambda("list_contains"));
assert!(!is_list_lambda("abs"));
assert!(!is_list_lambda(""));
}
#[test]
fn lambda_arg_index_is_second_position() {
assert_eq!(list_lambda_arg_index("list_filter"), Some(1));
assert_eq!(list_lambda_arg_index("list_transform"), Some(1));
assert_eq!(list_lambda_arg_index("list_append"), None);
}
}