aboutsummaryrefslogtreecommitdiff
path: root/niri-config/src/macros.rs
blob: 164b8dd80d92c22608dd8911c1f0d9c65af2fb82 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
macro_rules! merge {
    (($self:expr, $part:expr), $($field:ident),+ $(,)*) => {
        $(
            if let Some(x) = &$part.$field {
                $self.$field.merge_with(x);
            }
        )+
    };
}

macro_rules! merge_clone {
    (($self:expr, $part:expr), $($field:ident),+ $(,)*) => {
        $(
            if let Some(x) = &$part.$field {
                $self.$field.clone_from(x);
            }
        )+
    };
}

macro_rules! merge_clone_opt {
    (($self:expr, $part:expr), $($field:ident),+ $(,)*) => {
        $(
            if $part.$field.is_some() {
                $self.$field.clone_from(&$part.$field);
            }
        )+
    };
}

macro_rules! merge_color_gradient {
    (($self:expr, $part:expr), $(($color:ident, $gradient:ident)),+ $(,)*) => {
        $(
            if let Some(x) = $part.$color {
                $self.$color = x;
                $self.$gradient = None;
            }
            if let Some(x) = $part.$gradient {
                $self.$gradient = Some(x);
            }
        )+
    };
}

macro_rules! merge_color_gradient_opt {
    (($self:expr, $part:expr), $(($color:ident, $gradient:ident)),+ $(,)*) => {
        $(
            if let Some(x) = $part.$color {
                $self.$color = Some(x);
                $self.$gradient = None;
            }
            if let Some(x) = $part.$gradient {
                $self.$gradient = Some(x);
            }
        )+
    };
}

macro_rules! merge_on_off {
    (($self:expr, $part:expr)) => {
        if $part.off {
            $self.off = true;
            $self.on = false;
        }

        if $part.on {
            $self.off = false;
            $self.on = true;
        }
    };
}