use std::path::PathBuf;
use clap::{Args, Subcommand, ValueEnum};
#[derive(Debug, Clone, Copy, ValueEnum)]
pub(crate) enum PortableEntryKindArg {
Function,
Pipeline,
}
#[derive(Debug, Args)]
pub(crate) struct PortableArgs {
#[command(subcommand)]
pub command: PortableCommand,
}
#[derive(Debug, Subcommand)]
pub(crate) enum PortableCommand {
Compile(PortableCompileArgs),
Package(PortablePackageArgs),
Start(PortableStartArgs),
Resume(PortableResumeArgs),
}
#[derive(Debug, Args)]
pub(crate) struct PortablePackageArgs {
pub source: PathBuf,
#[arg(short, long, value_name = "PATH")]
pub output: PathBuf,
#[arg(long)]
pub check: bool,
}
#[derive(Debug, Args)]
pub(crate) struct PortableCompileArgs {
pub source: PathBuf,
#[arg(long, default_value = "main")]
pub entry: String,
#[arg(long = "entry-kind", value_enum, default_value_t = PortableEntryKindArg::Function)]
pub entry_kind: PortableEntryKindArg,
#[arg(short, long, value_name = "PATH")]
pub output: PathBuf,
}
#[derive(Debug, Args)]
pub(crate) struct PortableStartArgs {
pub artifact: PathBuf,
#[arg(long, value_name = "PATH")]
pub input: PathBuf,
#[arg(long, value_name = "PATH")]
pub grants: Option<PathBuf>,
#[arg(long = "snapshot-out", value_name = "PATH")]
pub snapshot_out: PathBuf,
}
#[derive(Debug, Args)]
pub(crate) struct PortableResumeArgs {
pub artifact: PathBuf,
#[arg(long, value_name = "PATH")]
pub snapshot: PathBuf,
#[arg(long, value_name = "PATH")]
pub result: PathBuf,
#[arg(long, value_name = "PATH")]
pub grants: PathBuf,
#[arg(long = "snapshot-out", value_name = "PATH")]
pub snapshot_out: PathBuf,
}