mecha10_cli/dev/
node_selection.rs1use crate::types::{NodeSpec, ProjectConfig};
4
5#[derive(Debug, Clone, PartialEq, Eq)]
6pub struct NodeToRun {
7 pub name: String,
8 pub identifier: String,
9 pub path: String,
10 pub is_framework_node: bool,
11}
12
13impl NodeToRun {
14 pub fn from_spec(spec: &NodeSpec) -> Self {
16 Self {
17 name: spec.name.clone(),
18 identifier: spec.identifier.clone(),
19 path: spec.package_path(),
20 is_framework_node: spec.is_framework(),
21 }
22 }
23}
24
25pub fn get_nodes_to_run(requested_nodes: &[String], project_config: &ProjectConfig) -> Vec<NodeToRun> {
27 let all_specs = project_config.nodes.get_node_specs();
28
29 let specs_to_run: Vec<NodeSpec> = if requested_nodes.is_empty() {
30 all_specs
31 } else {
32 all_specs
33 .into_iter()
34 .filter(|s| requested_nodes.contains(&s.name))
35 .collect()
36 };
37
38 specs_to_run.iter().map(NodeToRun::from_spec).collect()
39}
40
41pub fn get_available_node_names(project_config: &ProjectConfig) -> Vec<String> {
43 project_config.nodes.get_node_names()
44}
45
46#[allow(dead_code)]
51pub fn get_enabled_node_names(project_config: &ProjectConfig) -> Vec<String> {
52 project_config.nodes.get_node_names()
53}
54
55#[allow(dead_code)]
57pub fn is_framework_node(project_config: &ProjectConfig, name: &str) -> bool {
58 project_config
59 .nodes
60 .find_by_name(name)
61 .map(|s| s.is_framework())
62 .unwrap_or(false)
63}