Skip to main content

elasticctl_api/rules_ops/
observed.rs

1//! Rule mutation plans with observed state.
2
3use super::*;
4use crate::observe::{Observed, Preconditions};
5
6/// Plan enabled changes and return the rule state read for each target.
7pub async fn plan_set_enabled_observed(
8    t: &Transport,
9    selectors: &[String],
10    enable: bool,
11) -> Result<(MutationPlan, Preconditions)> {
12    let resolved = resolve_targets(t, selectors).await?;
13    let seen = Preconditions(
14        resolved
15            .iter()
16            .map(|(id, rule)| Observed {
17                object: "rule",
18                id: id.clone(),
19                state: Some(normalize::canonical(rule).into_value()),
20            })
21            .collect(),
22    );
23    let preview_details = resolved
24        .iter()
25        .map(|(id, r)| {
26            let from = if r.enabled() { "enabled" } else { "disabled" };
27            let to = if enable { "enabled" } else { "disabled" };
28            format!("{id}  {}  {from} -> {to}", r.name())
29        })
30        .collect();
31    let verb = if enable { "Enable" } else { "Disable" };
32    Ok((
33        MutationPlan {
34            preview_action: format!("{verb} {} rule(s)", resolved.len()),
35            preview_details,
36            targets: resolved.into_iter().map(|(id, _)| id).collect(),
37        },
38        seen,
39    ))
40}