lc/cli/
templates.rs

1//! Template management commands
2
3use crate::cli::TemplateCommands;
4use crate::config;
5use anyhow::Result;
6use colored::Colorize;
7
8/// Handle template-related commands
9pub 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}