2025-09-20 12:57:40 +03:00
|
|
|
macro_rules! merge_clone {
|
|
|
|
|
(($self:expr, $part:expr), $($field:ident),+ $(,)*) => {
|
|
|
|
|
$(
|
|
|
|
|
if let Some(x) = &$part.$field {
|
|
|
|
|
$self.$field.clone_from(x);
|
|
|
|
|
}
|
|
|
|
|
)+
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-20 12:57:41 +03:00
|
|
|
macro_rules! merge_clone_opt {
|
|
|
|
|
(($self:expr, $part:expr), $($field:ident),+ $(,)*) => {
|
|
|
|
|
$(
|
|
|
|
|
if $part.$field.is_some() {
|
|
|
|
|
$self.$field.clone_from(&$part.$field);
|
|
|
|
|
}
|
|
|
|
|
)+
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-20 12:57:40 +03:00
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
)+
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-20 12:57:41 +03:00
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|