use clap::{Args, Parser, Subcommand, ValueEnum}; use crate::{commands::connect::config_option::ConfigOptionCli, interactive_variable}; #[derive(Parser)] #[command(version, about, long_about = None)] pub struct Cli { #[command(subcommand)] pub command: Commands, /// Specify data file path #[arg(short, long)] pub data: Option, } #[derive(Subcommand)] pub enum Commands { /// Configures downpour endpoints Connect { #[arg(short, long)] name: Option, #[command(subcommand)] option: ConfigOptionCli, }, /// Uploads new game version to depot Upload { #[clap(flatten)] info: UploadInfoCli, #[arg(short, long)] /// Alias of a given connection name: Option, }, } #[derive(Args)] pub struct UploadInfo { pub path: String, pub game_id: String, pub version_id: String, } #[derive(Args)] pub struct UploadInfoCli { /// Relative path to new version files #[arg(short, long, default_value_t = String::from("."))] pub path: String, /// ID of game to attach to #[arg(short, long)] pub game_id: Option, /// Version ID to attach to #[arg(short, long)] pub version_id: Option, } impl UploadInfoCli { pub fn interactive_configure(self) -> UploadInfo { let path = self.path; interactive_variable!(self, game_id, "Game ID"); interactive_variable!(self, version_id, "Version ID"); UploadInfo { path, game_id, version_id, } } } #[derive(ValueEnum, Copy, Clone, Debug, PartialEq, Eq)] pub enum UploadStyle { S3, }