flowey_lib_common/
cfg_cargo_common_flags.rs1use flowey::node::prelude::*;
12
13#[derive(Serialize, Deserialize)]
14pub struct Flags {
15 pub locked: bool,
16 pub verbose: bool,
17}
18
19flowey_request! {
20 pub enum Request {
21 SetLocked(bool),
22 SetVerbose(ReadVar<bool>),
23 GetFlags(WriteVar<Flags>),
24 }
25}
26
27new_flow_node!(struct Node);
28
29impl FlowNode for Node {
30 type Request = Request;
31
32 fn imports(ctx: &mut ImportCtx<'_>) {
33 ctx.import::<crate::install_rust::Node>();
34 }
35
36 fn emit(requests: Vec<Self::Request>, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
37 let mut set_locked = None;
38 let mut set_verbose = None;
39 let mut get_flags = Vec::new();
40
41 for req in requests {
42 match req {
43 Request::SetLocked(v) => same_across_all_reqs("SetLocked", &mut set_locked, v)?,
44 Request::SetVerbose(v) => {
45 same_across_all_reqs_backing_var("SetVerbose", &mut set_verbose, v)?
46 }
47 Request::GetFlags(v) => get_flags.push(v),
48 }
49 }
50
51 let set_locked =
52 set_locked.ok_or(anyhow::anyhow!("Missing essential request: SetLocked"))?;
53 let set_verbose =
54 set_verbose.ok_or(anyhow::anyhow!("Missing essential request: SetVerbose"))?;
55 let get_flags = get_flags;
56
57 if get_flags.is_empty() {
60 return Ok(());
61 }
62
63 ctx.emit_minor_rust_step("report common cargo flags", |ctx| {
64 let get_flags = get_flags.claim(ctx);
65 let set_verbose = set_verbose.claim(ctx);
66
67 move |rt| {
68 let set_verbose = rt.read(set_verbose);
69 for var in get_flags {
70 rt.write(
71 var,
72 &Flags {
73 locked: set_locked,
74 verbose: set_verbose,
75 },
76 );
77 }
78 }
79 });
80
81 Ok(())
82 }
83}