use std::{
os::fd::RawFd,
path::{Path, PathBuf},
};
use clap::Parser;
#[derive(Parser, Debug)]
#[command(
name = env!("CARGO_PKG_NAME"),
version = env!("CARGO_PKG_VERSION"),
author = env!("CARGO_PKG_AUTHORS"),
about = env!("CARGO_PKG_DESCRIPTION"),
long_about = None
)]
pub struct Cli {
#[arg(short, long, action = clap::ArgAction::Count)]
pub verbose: u8,
#[arg(long, conflicts_with = "socket_path")]
fd: Option<RawFd>,
#[arg(long, required_unless_present = "fd")]
socket_path: Option<PathBuf>,
#[arg(long = "device", value_name = "PATH")]
pub devices: Vec<PathBuf>,
#[arg(long, value_name = "PATH")]
pub hotplug_socket_path: Option<PathBuf>,
}
#[derive(Debug)]
pub enum ServerSocket<'a> {
#[allow(dead_code)]
Fd(RawFd),
Path(&'a Path),
}
impl Cli {
pub fn server_socket(&self) -> ServerSocket<'_> {
self.socket_path.as_ref().map_or_else(
|| unreachable!(),
|socket_path| ServerSocket::Path(socket_path),
)
}
}