use crate::models::PivotConfig;
use clap::Parser;
#[derive(Parser, Debug)]
#[command(name = "whoxydse")]
#[command(about = "Discover related top-level domains using Whoxy API", long_about = None)]
pub struct Config {
#[arg(short, long)]
pub domain: String,
#[arg(short = 'k', long = "api-key")]
pub api_key: Option<String>,
#[arg(long = "use-name", default_value_t = true)]
pub use_name: bool,
#[arg(long = "no-name", conflicts_with = "use_name")]
pub no_name: bool,
#[arg(long = "use-email", default_value_t = true)]
pub use_email: bool,
#[arg(long = "no-email", conflicts_with = "use_email")]
pub no_email: bool,
#[arg(long = "use-company", default_value_t = true)]
pub use_company: bool,
#[arg(long = "no-company", conflicts_with = "use_company")]
pub no_company: bool,
#[arg(long = "continue-on-fail")]
pub continue_on_fail: bool,
#[arg(short = 'v', long = "verbose")]
pub verbose: bool,
#[arg(long = "search-name")]
pub search_names: Vec<String>,
#[arg(long = "search-email")]
pub search_emails: Vec<String>,
#[arg(long = "search-company")]
pub search_companies: Vec<String>,
}
impl Config {
pub fn api_key(&self) -> String {
self.api_key
.clone()
.or_else(|| std::env::var("WHOXY_API_KEY").ok())
.expect("API key must be provided via --api-key flag or WHOXY_API_KEY environment variable")
}
pub fn pivot_config(&self) -> PivotConfig {
PivotConfig {
use_name: self.use_name && !self.no_name,
use_email: self.use_email && !self.no_email,
use_company: self.use_company && !self.no_company,
}
}
}