Skip to main content

elasticctl_api/rules_ops/
observed.rs

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