pub fn get_mod_func(callback: &str) -> (&str, &str) {
callback.rsplit_once('.').unwrap_or(("", callback))
}
pub fn get_callable(view: &str) -> Result<String, String> {
if view.is_empty() {
Err("empty view".into())
} else {
Ok(view.into())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn get_mod_func_splits_module_and_function() {
assert_eq!(get_mod_func("app.views.index"), ("app.views", "index"));
}
#[test]
fn get_mod_func_returns_empty_module_when_missing_separator() {
assert_eq!(get_mod_func("index"), ("", "index"));
}
#[test]
fn get_callable_rejects_empty_views() {
assert_eq!(get_callable(""), Err("empty view".to_string()));
}
#[test]
fn get_callable_returns_view_name_for_non_empty_input() {
assert_eq!(
get_callable("app.views.index"),
Ok("app.views.index".to_string())
);
}
}