use std::process::ExitCode;
use anyhow::Result;
use crate::commands;
use crate::output::{self, OutputFormat};
use crate::paths;
pub(crate) fn dispatch(command: crate::PodCommand, format: OutputFormat) -> Result<ExitCode> {
match command {
crate::PodCommand::Init(args) => {
let repo_path = paths::cli::resolve(&args.path)?;
let report =
commands::pod::init(&repo_path, args.profile.as_deref(), &args.name, args.force)?;
output::render_report(format, &report)
}
crate::PodCommand::List => {
let report = commands::pod::list()?;
output::render_report(format, &report)
}
crate::PodCommand::Status(args) => {
let repo_path = args
.path
.as_ref()
.map(|path| paths::cli::resolve(path))
.transpose()?;
let report = commands::pod::status(
args.name.as_deref(),
repo_path.as_deref(),
args.profile.as_deref(),
)?;
output::render_report(format, &report)
}
crate::PodCommand::MigrateDefaults(args) => {
let repo_path = paths::cli::resolve(&args.path)?;
let report = crate::memory::pod_migration::run(
&repo_path,
args.profile.as_deref(),
&args.memory_items,
&args.policy_items,
args.adopt_suggested,
args.write,
)?;
output::render_report(format, &report)
}
}
}