use std::path::PathBuf;
use clap::{Parser, Subcommand};
#[derive(Parser)]
#[command(
name = "modelpipe",
version,
about = "Your model server, from anywhere"
)]
pub(crate) struct Cli {
#[expect(clippy::doc_markdown, reason = "clap help text, not rustdoc")]
#[arg(short, long, global = true, action = clap::ArgAction::Count)]
pub(crate) verbose: u8,
#[command(subcommand)]
pub(crate) command: Command,
}
#[derive(Subcommand)]
pub(crate) enum Command {
Serve {
#[expect(clippy::doc_markdown, reason = "clap help text, not rustdoc")]
backend_url: String,
#[arg(long)]
insecure_no_auth: bool,
#[expect(clippy::doc_markdown, reason = "clap help text, not rustdoc")]
#[arg(
long,
env = "MODELPIPE_TOKEN",
hide_env_values = true,
conflicts_with = "insecure_no_auth"
)]
token: Option<String>,
#[arg(long, conflicts_with_all = ["insecure_no_auth", "token"])]
token_file: Option<PathBuf>,
#[arg(long)]
allow_private_backend: bool,
#[arg(long)]
relay: Option<String>,
#[arg(long, value_name = "FILE")]
identity: Option<PathBuf>,
#[arg(long)]
no_qr: bool,
#[arg(long)]
no_portmap: bool,
#[arg(long)]
no_discovery: bool,
},
Connect {
ticket: String,
#[arg(long)]
bind: Option<std::net::SocketAddr>,
#[arg(long)]
relay: Option<String>,
#[arg(long)]
no_portmap: bool,
#[arg(long)]
no_discovery: bool,
},
}