File size: 819 Bytes
52a9af3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
//! Requirements rules are additive across layers. Higher-priority rules are
//! appended first so the final rule order keeps priority visible.

use crate::RequirementSource;
use crate::RequirementsExecPolicyToml;
use crate::Sourced;

use super::stack::merge_output_source;

pub(super) fn merge(
    target: &mut Option<Sourced<RequirementsExecPolicyToml>>,
    incoming: Option<RequirementsExecPolicyToml>,
    source: &RequirementSource,
) {
    let Some(incoming) = incoming else {
        return;
    };
    let Some(existing) = target.as_mut() else {
        *target = Some(Sourced::new(incoming, source.clone()));
        return;
    };

    let RequirementsExecPolicyToml { prefix_rules } = incoming;
    existing.value.prefix_rules.extend(prefix_rules);
    merge_output_source(&mut existing.source, source);
}