pub struct ObjectUtils;
impl ObjectUtils {
#[must_use]
pub fn null_safe<T>(target: Option<T>, default_value: Option<T>) -> Option<T> {
target.or(default_value)
}
}
#[cfg(test)]
mod tests {
use std::rc::Rc;
use super::ObjectUtils;
#[test]
fn selects_target_or_nullable_default_without_cloning() {
let target = Rc::new("target".to_owned());
let default_value = Rc::new("default".to_owned());
let selected =
ObjectUtils::null_safe(Some(Rc::clone(&target)), Some(Rc::clone(&default_value)))
.expect("target");
assert!(Rc::ptr_eq(&selected, &target));
assert!(!Rc::ptr_eq(&selected, &default_value));
let selected_default =
ObjectUtils::null_safe(None, Some(Rc::clone(&default_value))).expect("default");
assert!(Rc::ptr_eq(&selected_default, &default_value));
assert_eq!(ObjectUtils::null_safe::<String>(None, None), None);
}
}