1use crate::cli::TemplateCommands;
4use crate::config;
5use anyhow::Result;
6use colored::Colorize;
7
8pub async fn handle(command: TemplateCommands) -> Result<()> {
10 match command {
11 TemplateCommands::Add { name, prompt } => {
12 let mut config = config::Config::load()?;
13 config.add_template(name.clone(), prompt.clone())?;
14 config.save()?;
15 println!("{} Template '{}' added", "✓".green(), name);
16 }
17 TemplateCommands::Delete { name } => {
18 let mut config = config::Config::load()?;
19 config.remove_template(name.clone())?;
20 config.save()?;
21 println!("{} Template '{}' removed", "✓".green(), name);
22 }
23 TemplateCommands::List => {
24 let config = config::Config::load()?;
25 let templates = config.list_templates();
26
27 if templates.is_empty() {
28 println!("No templates configured.");
29 } else {
30 println!("\n{}", "Templates:".bold().blue());
31 for (name, prompt) in templates {
32 let display_prompt = if prompt.len() > 60 {
33 format!("{}...", &prompt[..60])
34 } else {
35 prompt.clone()
36 };
37 println!(" {} {} -> {}", "•".blue(), name.bold(), display_prompt);
38 }
39 }
40 }
41 }
42
43 Ok(())
44}