use anyhow::Result;
use clap::Args;
use pixa::favicon::{FaviconOptions, generate_favicon_set};
use std::path::PathBuf;
use super::format_size;
use super::style::{bold, dim, green, ok_mark};
#[derive(Args)]
pub struct FaviconArgs {
pub input: PathBuf,
#[arg(short, long, default_value = "favicon-output")]
pub output_dir: PathBuf,
#[arg(long, default_value = "4")]
pub png_level: u8,
#[arg(long)]
pub json: bool,
}
pub fn run(args: FaviconArgs) -> Result<()> {
let opts = FaviconOptions {
png_level: args.png_level,
};
let result = generate_favicon_set(&args.input, &args.output_dir, &opts)?;
if args.json {
println!("{}", serde_json::to_string_pretty(&result)?);
return Ok(());
}
println!(
"{} Favicon set generated in {} {}",
ok_mark(),
green(&args.output_dir.display().to_string()),
dim(&format!(
"({} files, {})",
result.generated_files.len(),
format_size(result.total_size)
)),
);
for file in &result.generated_files {
println!(" {} {}", dim("•"), green(&file.display().to_string()));
}
println!("\n{}", bold("HTML snippet"));
for line in result.html_snippet.lines() {
println!(" {line}");
}
Ok(())
}