Skip to main content

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}