use crate::services::ProcessService;
use crate::types::{NodeSpec, ProjectConfig};
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct NodeToRun {
pub name: String,
pub identifier: String,
pub path: String,
pub is_framework_node: bool,
}
impl NodeToRun {
pub fn from_spec(spec: &NodeSpec) -> Self {
Self {
name: spec.name.clone(),
identifier: spec.identifier.clone(),
path: spec.package_path(),
is_framework_node: spec.is_framework(),
}
}
#[allow(dead_code)]
pub fn binary_path(&self, project_name: &str) -> String {
ProcessService::resolve_node_binary(&self.name, self.is_framework_node, project_name)
}
#[allow(dead_code)]
pub fn args(&self, project_name: &str) -> Vec<String> {
if self.is_framework_node {
let binary_path = self.binary_path(project_name);
if !binary_path.starts_with("target/") {
vec![]
} else {
vec!["node".to_string(), self.name.clone()]
}
} else {
vec![]
}
}
}
pub fn get_nodes_to_run(requested_nodes: &[String], project_config: &ProjectConfig) -> Vec<NodeToRun> {
let all_specs = project_config.nodes.get_node_specs();
let specs_to_run: Vec<NodeSpec> = if requested_nodes.is_empty() {
all_specs
} else {
all_specs
.into_iter()
.filter(|s| requested_nodes.contains(&s.name))
.collect()
};
specs_to_run.iter().map(NodeToRun::from_spec).collect()
}
pub fn get_available_node_names(project_config: &ProjectConfig) -> Vec<String> {
project_config.nodes.get_node_names()
}
#[allow(dead_code)] pub fn get_enabled_node_names(project_config: &ProjectConfig) -> Vec<String> {
project_config.nodes.get_node_names()
}
#[allow(dead_code)] pub fn find_node_by_name(project_config: &ProjectConfig, name: &str) -> Option<NodeSpec> {
project_config.nodes.find_by_name(name)
}
#[allow(dead_code)] pub fn is_framework_node(project_config: &ProjectConfig, name: &str) -> bool {
project_config
.nodes
.find_by_name(name)
.map(|s| s.is_framework())
.unwrap_or(false)
}
#[allow(dead_code)] pub fn is_project_node(project_config: &ProjectConfig, name: &str) -> bool {
project_config
.nodes
.find_by_name(name)
.map(|s| s.is_project())
.unwrap_or(false)
}