feat!: CLI init

- Added CLI, does not perform any action now,
  but accepts arguments correctly

BREAKING CHANGE: Removed main.rs file
This commit is contained in:
Alexey 2025-11-29 11:00:12 +03:00
commit 119b7bce9c
4 changed files with 117 additions and 4 deletions

95
src/bin/cli.rs Normal file
View file

@ -0,0 +1,95 @@
use std::path::PathBuf;
use clap::{Parser,Subcommand,Args,ValueEnum};
#[derive(Parser)]
#[command(version, about, long_about = None)]
#[command(propagate_version = true)]
struct Cli {
/// Path to config
#[arg(short, long)]
config: PathBuf,
/// Object to make operation on
#[command(subcommand)]
command: Objects,
}
#[derive(Subcommand)]
enum Objects {
/// Operations on the quests
#[command(subcommand)]
Quest(QuestCommands)
}
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum)]
enum QuestDifficulty {
/// Easy quest
Easy,
/// Normal quest
Normal,
/// Hard quest
Hard,
/// Special case of hard quests.
Secret
}
#[derive(Subcommand)]
enum QuestCommands {
/// List available quests
List(QuestListArgs),
/// Create new quest and automatically assign it id
Create(QuestCreateArgs),
/// Update existing quest
Update(QuestUpdateArgs),
/// Delete quest
Delete(QuestDeleteArgs),
}
#[derive(Args)]
struct QuestListArgs {
/// Only list id and name of the quest
#[arg(short, long)]
short: bool
}
#[derive(Args)]
struct QuestCreateArgs {
/// Difficulty of the quest
#[arg(value_enum)]
difficulty: QuestDifficulty,
/// Reward for the quest
reward: u32,
/// Name of the quest
name: String,
/// Visible description of the quest
description: String,
/// Answer for the quest for admins
answer: String
}
#[derive(Args)]
struct QuestUpdateArgs {
/// Id of the quest to update
id: u16,
/// Difficulty of the quest
#[arg(value_enum)]
difficulty: QuestDifficulty,
/// Reward for the quest
reward: u32,
/// Name of the quest
name: String,
/// Visible description of the quest
description: String,
/// Answer for the quest for admins
answer: String
}
#[derive(Args)]
struct QuestDeleteArgs {
/// Id of the quest to delete
id: u16
}
fn main() {
let _cli = Cli::parse();
}

View file

@ -1,3 +0,0 @@
fn main() {
println!("Hello, world!");
}