Skip to main content

ralph/cli/task/
handle.rs

1//! Task CLI routing.
2//!
3//! Responsibilities:
4//! - Resolve config and dispatch `ralph task` subcommands to their handlers.
5//! - Keep the task facade focused on re-exports and module wiring.
6//!
7//! Not handled here:
8//! - Clap argument definitions.
9//! - Queue persistence internals.
10//!
11//! Invariants/assumptions:
12//! - Config resolution always uses the current working directory.
13
14use anyhow::Result;
15
16use crate::config;
17
18use super::{
19    TaskArgs, TaskCommand, TaskFromCommand, batch, build, children, clone, decompose, edit,
20    from_template, mutate, parent, refactor, relations, schedule, show, split, start, status,
21    template,
22};
23
24pub fn handle_task(args: TaskArgs, force: bool) -> Result<()> {
25    let resolved = config::resolve_from_cwd()?;
26
27    match args.command {
28        Some(TaskCommand::Ready(args)) => status::handle_ready(&args, force, &resolved),
29        Some(TaskCommand::Status(args)) => status::handle_status(&args, force, &resolved),
30        Some(TaskCommand::Done(args)) => status::handle_done(&args, force, &resolved),
31        Some(TaskCommand::Reject(args)) => status::handle_reject(&args, force, &resolved),
32        Some(TaskCommand::Field(args)) => edit::handle_field(&args, force, &resolved),
33        Some(TaskCommand::Edit(args)) => edit::handle_edit(&args, force, &resolved),
34        Some(TaskCommand::Mutate(args)) => mutate::handle(&args, force, &resolved),
35        Some(TaskCommand::Update(args)) => edit::handle_update(&args, &resolved, force),
36        Some(TaskCommand::Build(args)) => build::handle(&args, force, &resolved),
37        Some(TaskCommand::Decompose(args)) => decompose::handle(&args, force, &resolved),
38        Some(TaskCommand::Template(template_args)) => template::handle(&resolved, &template_args),
39        Some(TaskCommand::BuildRefactor(args)) | Some(TaskCommand::Refactor(args)) => {
40            refactor::handle(&args, force, &resolved)
41        }
42        Some(TaskCommand::Show(args)) => show::handle(&args, &resolved),
43        Some(TaskCommand::Clone(args)) => clone::handle(&args, force, &resolved),
44        Some(TaskCommand::Batch(args)) => batch::handle(&args, force, &resolved),
45        Some(TaskCommand::Schedule(args)) => schedule::handle(&args, force, &resolved),
46        Some(TaskCommand::Relate(args)) => relations::handle_relate(&args, force, &resolved),
47        Some(TaskCommand::Blocks(args)) => relations::handle_blocks(&args, force, &resolved),
48        Some(TaskCommand::MarkDuplicate(args)) => {
49            relations::handle_mark_duplicate(&args, force, &resolved)
50        }
51        Some(TaskCommand::Split(args)) => split::handle(&args, force, &resolved),
52        Some(TaskCommand::Start(args)) => start::handle(&args, force, &resolved),
53        Some(TaskCommand::Children(args)) => children::handle(&args, &resolved),
54        Some(TaskCommand::Parent(args)) => parent::handle(&args, &resolved),
55        Some(TaskCommand::From(args)) => match args.command {
56            TaskFromCommand::Template(template_args) => {
57                from_template::handle(&resolved, &template_args, force)
58            }
59        },
60        None => build::handle(&args.build, force, &resolved),
61    }
62}