use std::path::PathBuf;
use clap::{Parser, Subcommand};
#[derive(Debug, Parser)]
#[command(name = "sbe", version, about, long_about = None)]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
}
#[derive(Debug, Subcommand)]
pub enum Commands {
Run(RunArgs),
Inspect(InspectArgs),
Profiles,
}
#[derive(Debug, Parser)]
pub struct RunArgs {
#[arg(short = 'p', long)]
pub profile: Option<String>,
#[arg(short = 'n', long = "allow-domain", action = clap::ArgAction::Append)]
pub allow_domain: Vec<String>,
#[arg(short = 'N', long = "deny-domain", action = clap::ArgAction::Append)]
pub deny_domain: Vec<String>,
#[arg(short = 'w', long = "allow-write", action = clap::ArgAction::Append)]
pub allow_write: Vec<PathBuf>,
#[arg(short = 'r', long = "deny-read", action = clap::ArgAction::Append)]
pub deny_read: Vec<PathBuf>,
#[arg(short = 'e', long = "allow-exec", action = clap::ArgAction::Append)]
pub allow_exec: Vec<PathBuf>,
#[arg(short = 'E', long = "deny-exec", action = clap::ArgAction::Append)]
pub deny_exec: Vec<PathBuf>,
#[arg(short = 'f', long = "allow-fetch", action = clap::ArgAction::Append)]
pub allow_fetch: Vec<String>,
#[arg(long)]
pub allow_all_network: bool,
#[arg(long)]
pub no_proxy: bool,
#[arg(long)]
pub allow_degraded: bool,
#[arg(long)]
pub audit: bool,
#[arg(long)]
pub audit_log: Option<PathBuf>,
#[arg(long)]
pub dry_run: bool,
#[arg(short = 'c', long)]
pub config: Option<PathBuf>,
#[arg(short = 'v', long)]
pub verbose: bool,
#[arg(last = true, required = true)]
pub command: Vec<String>,
}
#[derive(Debug, Parser)]
pub struct InspectArgs {
#[arg(short = 'p', long)]
pub profile: Option<String>,
#[arg(short = 'n', long = "allow-domain", action = clap::ArgAction::Append)]
pub allow_domain: Vec<String>,
#[arg(short = 'N', long = "deny-domain", action = clap::ArgAction::Append)]
pub deny_domain: Vec<String>,
#[arg(short = 'w', long = "allow-write", action = clap::ArgAction::Append)]
pub allow_write: Vec<PathBuf>,
#[arg(short = 'r', long = "deny-read", action = clap::ArgAction::Append)]
pub deny_read: Vec<PathBuf>,
#[arg(short = 'e', long = "allow-exec", action = clap::ArgAction::Append)]
pub allow_exec: Vec<PathBuf>,
#[arg(short = 'E', long = "deny-exec", action = clap::ArgAction::Append)]
pub deny_exec: Vec<PathBuf>,
#[arg(short = 'f', long = "allow-fetch", action = clap::ArgAction::Append)]
pub allow_fetch: Vec<String>,
#[arg(long)]
pub allow_all_network: bool,
#[arg(long)]
pub no_proxy: bool,
#[arg(long)]
pub allow_degraded: bool,
#[arg(short = 'c', long)]
pub config: Option<PathBuf>,
#[arg(last = true, required = true)]
pub command: Vec<String>,
}
impl InspectArgs {
pub fn as_run_args(&self) -> RunArgs {
RunArgs {
profile: self.profile.clone(),
allow_domain: self.allow_domain.clone(),
deny_domain: self.deny_domain.clone(),
allow_write: self.allow_write.clone(),
deny_read: self.deny_read.clone(),
allow_exec: self.allow_exec.clone(),
deny_exec: self.deny_exec.clone(),
allow_fetch: self.allow_fetch.clone(),
allow_all_network: self.allow_all_network,
no_proxy: self.no_proxy,
allow_degraded: self.allow_degraded,
audit: false,
audit_log: None,
dry_run: true,
config: self.config.clone(),
verbose: false,
command: self.command.clone(),
}
}
}