Skip to main content

ironflow_cli/commands/
workflow.rs

1//! Workflow subcommands: list, get, pause, resume.
2
3use anyhow::Result;
4use clap::{Args, Subcommand};
5use ironflow_sdk::IronflowClient;
6
7use crate::output;
8
9/// Arguments for the `workflow` command group.
10#[derive(Debug, Args)]
11pub struct WorkflowArgs {
12    /// Workflow subcommand.
13    #[command(subcommand)]
14    pub command: WorkflowCommands,
15}
16
17/// Available workflow subcommands.
18#[derive(Debug, Subcommand)]
19pub enum WorkflowCommands {
20    /// List all registered workflows.
21    List,
22    /// Get details of a specific workflow.
23    Get {
24        /// Workflow name.
25        name: String,
26    },
27    /// Pause a workflow: workers stop picking its queued runs.
28    Pause {
29        /// Workflow name.
30        name: String,
31    },
32    /// Resume a paused workflow: workers pick its queued runs again.
33    Resume {
34        /// Workflow name.
35        name: String,
36    },
37}
38
39/// Execute a workflow subcommand.
40///
41/// # Errors
42///
43/// Returns an error on API failure.
44pub async fn execute(client: &IronflowClient, args: &WorkflowArgs, json_mode: bool) -> Result<()> {
45    match &args.command {
46        WorkflowCommands::List => {
47            let response = client.list_workflows().await?;
48            output::print_output(json_mode, &response, || {
49                output::workflows_table(&response.data)
50            })?;
51        }
52        WorkflowCommands::Get { name } => {
53            let response = client.get_workflow(name).await?;
54            output::print_output(json_mode, &response, || {
55                output::workflow_detail_table(&response.data)
56            })?;
57        }
58        WorkflowCommands::Pause { name } => {
59            let response = client.pause_workflow(name).await?;
60            output::print_output(json_mode, &response, || {
61                output::workflow_pause_table(&response.data)
62            })?;
63        }
64        WorkflowCommands::Resume { name } => {
65            let response = client.resume_workflow(name).await?;
66            output::print_output(json_mode, &response, || {
67                output::workflow_pause_table(&response.data)
68            })?;
69        }
70    }
71    Ok(())
72}