ephemeris_forge_github/api/request/
rulesets.rs1mod rules;
2
3use facet::Facet;
4use facet_value::Value;
5
6use self::rules::{RuleEntry, rule_entries};
7use crate::{ActorType, BypassActor, BypassMode, Enforcement, Ruleset as Definition, Target};
8
9#[derive(Facet)]
11pub(crate) struct RulesetBody<'a> {
12 name: &'a str,
13 target: &'a Target,
14 enforcement: Enforcement,
15 bypass_actors: Vec<BypassActorBody>,
16 conditions: Conditions<'a>,
17 rules: Vec<RuleEntry<'a>>,
18}
19
20#[derive(Facet)]
21struct BypassActorBody {
22 actor_id: Option<i64>,
23 actor_type: ActorType,
24 bypass_mode: BypassMode,
25}
26
27#[derive(Facet)]
28struct Conditions<'a> {
29 ref_name: RefName<'a>,
30}
31
32#[derive(Facet)]
33struct RefName<'a> {
34 exclude: &'a [String],
35 include: &'a [String],
36}
37
38impl<'a> RulesetBody<'a> {
39 pub(crate) fn new(
40 name: &'a str,
41 ruleset: &'a Definition,
42 unmanaged_rules: &'a [Value],
43 ) -> Self {
44 Self {
45 name,
46 target: &ruleset.target,
47 enforcement: ruleset.enforcement,
48 bypass_actors: ruleset
49 .bypass_actors
50 .iter()
51 .map(BypassActorBody::from)
52 .collect(),
53 conditions: Conditions {
54 ref_name: RefName {
55 exclude: &ruleset.exclude,
56 include: &ruleset.include,
57 },
58 },
59 rules: rule_entries(&ruleset.rules, unmanaged_rules),
60 }
61 }
62}
63
64impl From<&BypassActor> for BypassActorBody {
65 fn from(actor: &BypassActor) -> Self {
66 Self {
67 actor_id: actor.wire_id(),
68 actor_type: actor.actor_type,
69 bypass_mode: actor.bypass_mode,
70 }
71 }
72}