slug_generator_plus 0.1.1

Enhanced URL slug generator with optimizations
Documentation
use anyhow::Result;
use clap::Parser;
use slug_generator_plus::generate_slug;

#[derive(Parser)]
#[command(author, version, about, long_about = None)]
/// Generate a URL-friendly slug from a string
struct Args {
    /// Text to convert to slug
    #[arg(required = true)]
    text: Vec<String>,

    /// Separator to use (default: "-")
    #[arg(short, long, default_value = "-")]
    separator: String,

    /// Maximum length of slug (default: 100)
    #[arg(short, long)]
    max_length: Option<usize>,

    /// Preserve original case (default: false - lowercase)
    #[arg(short, long)]
    preserve_case: bool,

    /// Show only the slug (quiet mode)
    #[arg(short, long)]
    quiet: bool,
}

fn main() -> Result<()> {
    let args = Args::parse();

    // Join all text arguments with space
    let text = args.text.join(" ");

    // Validate separator
    if args.separator.is_empty() {
        anyhow::bail!("Separator cannot be empty");
    }

    // Generate slug
    let slug = generate_slug(
        &text,
        Some(&args.separator),
        args.max_length,
        Some(!args.preserve_case),
    );

    // Output
    if args.quiet {
        println!("{}", slug);
    } else {
        println!("Original: {}", text);
        println!("Slug:     {}", slug);
        println!("Length:   {}", slug.len());
    }

    Ok(())
}