evobench_tools/utillib/
fallback.rs

1//! Avoid errors when implementing fallbacks with option structs.
2
3pub trait FallingBackTo {
4    /// Use values from self if present, otherwise use those from
5    /// `fallback`.
6    fn falling_back_to(self, fallback: &Self) -> Self;
7}
8
9#[macro_export]
10macro_rules! fallback_to_option {
11    { $fallback:ident . $field:ident } => {
12        let $field = $field.or_else(|| $fallback.$field.clone());
13    }
14}
15
16#[macro_export]
17macro_rules! fallback_to_trait {
18    { $fallback:ident . $field:ident } => {
19        let $field = $field.falling_back_to(&$fallback.$field);
20    }
21}
22
23#[macro_export]
24macro_rules! fallback_to_default {
25    { $default:ident . $field:ident } => {
26        let $field = $field.unwrap_or($default.$field);
27    }
28}