use clap::Subcommand;
use std::path::PathBuf;
#[derive(Debug, Clone, Copy, Default, clap::ValueEnum)]
pub enum OutputFormat {
#[default]
Table,
Csv,
Json,
}
#[derive(Subcommand)]
pub enum ItemsDbCommand {
Init,
Add {
serial: String,
#[arg(long)]
name: Option<String>,
#[arg(long)]
prefix: Option<String>,
#[arg(long)]
manufacturer: Option<String>,
#[arg(long)]
weapon_type: Option<String>,
#[arg(long)]
rarity: Option<String>,
#[arg(long)]
level: Option<i32>,
#[arg(long)]
element: Option<String>,
},
List {
#[arg(long)]
manufacturer: Option<String>,
#[arg(long)]
weapon_type: Option<String>,
#[arg(long)]
element: Option<String>,
#[arg(long)]
rarity: Option<String>,
#[arg(long, default_value = "table")]
format: OutputFormat,
#[arg(short, long, value_delimiter = ',')]
fields: Option<Vec<String>>,
},
Show {
serial: String,
},
Attach {
image: PathBuf,
serial: String,
#[arg(short, long)]
name: Option<String>,
#[arg(long)]
popup: bool,
#[arg(long)]
detail: bool,
},
Import {
#[arg(default_value = "share/weapons")]
path: PathBuf,
},
Export {
serial: String,
output: PathBuf,
},
Stats,
Salt,
Verify {
serial: String,
status: String,
#[arg(short, long)]
notes: Option<String>,
},
DecodeAll {
#[arg(long)]
force: bool,
},
Decode {
serial: Option<String>,
#[arg(long, conflicts_with = "serial")]
all: bool,
},
ImportSave {
save: PathBuf,
#[arg(long)]
decode: bool,
#[arg(long)]
legal: bool,
#[arg(long)]
source: Option<String>,
},
MarkLegal {
ids: Vec<String>,
},
SetSource {
source: String,
#[arg(required_unless_present = "where_clause")]
ids: Vec<String>,
#[arg(long = "where")]
where_clause: Option<String>,
},
Merge {
source: PathBuf,
dest: PathBuf,
},
SetValue {
serial: String,
field: String,
value: String,
#[arg(long, short, default_value = "decoder")]
source: String,
#[arg(long)]
source_detail: Option<String>,
#[arg(long, short, default_value = "inferred")]
confidence: String,
},
GetValues {
serial: String,
field: String,
},
MigrateValues {
#[arg(long)]
dry_run: bool,
},
Publish {
#[arg(long, short, default_value = "https://items.bl4.dev")]
server: String,
#[arg(long)]
serial: Option<String>,
#[arg(long)]
attachments: bool,
#[arg(long)]
dry_run: bool,
},
Pull {
#[arg(long, short, default_value = "https://items.bl4.dev")]
server: String,
#[arg(long)]
authoritative: bool,
#[arg(long)]
dry_run: bool,
},
}