gps/ps/private/utils/mergable.rs
1pub trait Mergable {
2 fn merge(&self, b: &Self) -> Self;
3}
4
5/// Merge optional mergables together given mergable a & b where b takes presedence
6pub fn merge_option<T: Mergable + std::clone::Clone>(a: &Option<T>, b: &Option<T>) -> Option<T> {
7 b.as_ref()
8 .map(|bb| {
9 a.as_ref()
10 .map(|aa| aa.merge(bb))
11 .unwrap_or_else(|| (*bb).clone())
12 })
13 .or_else(|| a.clone())
14}