mecha10-cli 0.8.0

Mecha10 CLI tool
Documentation
#![allow(dead_code)]

//! Process service for managing child processes
//!
//! Provides process lifecycle management for CLI commands, particularly for the `dev` and
//! `run` commands that need to manage multiple node processes. Thin wrapper around
//! mecha10-runtime's ProcessManager.

mod build;
mod control;
mod resolve;
mod spawn;
mod spawn_node;

use mecha10_runtime::ProcessManager;

pub struct ProcessService {
    manager: ProcessManager,
}

impl ProcessService {
    /// Create a new process service
    pub fn new() -> Self {
        Self {
            manager: ProcessManager::new(),
        }
    }

    /// Track dependency relationship for a node. `dependencies` is the list of nodes `node`
    /// depends on.
    pub fn track_dependency(&mut self, node: &str, dependencies: Vec<String>) {
        for dep in dependencies {
            self.manager.add_dependency(node.to_string(), dep);
        }
    }

    /// Get shutdown order (reverse dependency order): nodes with dependents first, then their
    /// dependencies, so we never stop a node while others still depend on it.
    pub fn get_shutdown_order(&self) -> Vec<String> {
        self.manager.shutdown_order()
    }

    /// Get the number of tracked processes
    pub fn count(&self) -> usize {
        self.manager.len()
    }

    /// Check if any processes are being tracked
    pub fn is_empty(&self) -> bool {
        self.manager.is_empty()
    }

    /// Get access to the underlying ProcessManager, for advanced operations.
    pub fn manager(&mut self) -> &mut ProcessManager {
        &mut self.manager
    }
}

impl Default for ProcessService {
    fn default() -> Self {
        Self::new()
    }
}

impl Drop for ProcessService {
    fn drop(&mut self) {}
}