Skip to main content

sim_lib_intent/
cookbook.rs

1//! Deterministic cookbook builders for Intent recipes.
2
3use sim_kernel::{Expr, Symbol};
4
5use crate::{Origin, intent, validate_intent};
6
7/// Build the select Intent used by the cookbook selection recipe.
8pub fn select_intent_demo() -> Expr {
9    let intent = intent(
10        "select",
11        Origin::human(1),
12        vec![(
13            "targets",
14            Expr::List(vec![Expr::Symbol(Symbol::qualified("pane", "main"))]),
15        )],
16    );
17    debug_assert!(validate_intent(&intent).is_ok());
18    intent
19}
20
21#[cfg(test)]
22mod tests {
23    use super::*;
24    use crate::{intent_kind_of, referenced_targets};
25
26    #[test]
27    fn select_intent_demo_is_valid_and_names_a_target() {
28        let demo = select_intent_demo();
29        validate_intent(&demo).expect("demo Intent validates");
30        assert_eq!(
31            intent_kind_of(&demo).map(|kind| kind.name.to_string()),
32            Some("select".to_owned())
33        );
34        assert_eq!(
35            referenced_targets(&demo),
36            vec![(
37                "targets[0]".to_owned(),
38                Expr::Symbol(Symbol::qualified("pane", "main")),
39            )]
40        );
41    }
42}