use clap::{Parser, ValueEnum};
use miette::IntoDiagnostic;
use url::Url;
#[derive(Parser)]
#[command(
name = "tyupy",
version,
about = "tyupy 🐿️. \nGet URL(s) title in any format.",
after_long_help = "Bugs can be reported on GitHub: https://github.com/azzamsa/tyupy/issues"
)]
pub struct Opts {
#[arg(value_parser = parse_url)]
pub url: Option<Url>,
#[arg(short, long, value_enum, default_value_t = Format::Markdown)]
pub format: Format,
#[arg(short, long)]
pub max_length: Option<usize>,
#[arg(short, long, requires = "max_length")]
pub ellipsis: Option<String>,
}
#[derive(Debug, Clone, ValueEnum)]
pub enum Format {
#[value(alias = "m")]
Markdown,
#[value(alias = "o")]
Org,
}
pub fn parse_url(arg: &str) -> miette::Result<Url> {
Url::parse(arg).into_diagnostic()
}