use clap::Parser;
use std::{net::SocketAddr, path::PathBuf, str::FromStr};
#[derive(Parser)]
#[clap(version, author = "eulegang", long_about = None)]
pub struct Cli {
#[clap(short, long, default_value = "127.0.0.1:8091")]
pub listen: SocketAddr,
#[clap(short = 'f', long = "file")]
pub configure: Option<PathBuf>,
#[clap(short, long, requires = "configure")]
#[cfg(target_os = "linux")]
pub watch: bool,
#[clap(short = 'L', long)]
pub log: Option<PathBuf>,
#[clap(short, long)]
pub trace: bool,
#[clap(short, long)]
pub nvim: Option<NvimConnInfo>,
#[clap(flatten)]
pub tls: CertOpts,
}
#[derive(Clone)]
pub enum NvimConnInfo {
Stdin,
Unix(PathBuf),
}
#[derive(Parser)]
pub struct CertOpts {
#[clap(short, long, requires = "cert")]
pub key: Option<PathBuf>,
#[clap(short, long, requires = "key")]
pub cert: Option<PathBuf>,
}
impl FromStr for NvimConnInfo {
type Err = <PathBuf as FromStr>::Err;
fn from_str(s: &str) -> Result<Self, Self::Err> {
if s == "-" {
Ok(NvimConnInfo::Stdin)
} else {
Ok(NvimConnInfo::Unix(PathBuf::from_str(s)?))
}
}
}
impl NvimConnInfo {
pub fn singleton(&self) -> bool {
matches!(self, NvimConnInfo::Stdin)
}
}