use clap::Subcommand;
use clap_complete::Shell;
use std::path::PathBuf;
use crate::cli_types::{IndexTypeArg, MetricArg, StorageModeArg};
use crate::graph;
#[derive(Subcommand)]
pub enum Commands {
Repl {
#[arg(default_value = "./data")]
path: PathBuf,
},
Info {
path: PathBuf,
},
Completions {
#[arg(value_enum)]
shell: Shell,
},
Simd {
#[command(subcommand)]
action: SimdAction,
},
License {
#[command(subcommand)]
action: LicenseAction,
},
Collection {
#[command(subcommand)]
action: CollectionCommands,
},
Data {
#[command(subcommand)]
action: DataCommands,
},
#[command(name = "query")]
QueryCmd {
#[command(subcommand)]
action: QueryCommands,
},
Graph {
#[command(subcommand)]
action: graph::GraphAction,
},
Index {
#[command(subcommand)]
action: IndexAction,
},
}
#[derive(Subcommand)]
pub enum CollectionCommands {
#[command(name = "create")]
CreateVector {
path: PathBuf,
name: String,
#[arg(short, long)]
dimension: usize,
#[arg(short, long, value_enum, default_value = "cosine")]
metric: MetricArg,
#[arg(short, long, value_enum, default_value = "full")]
storage: StorageModeArg,
},
#[command(name = "create-graph")]
CreateGraph {
path: PathBuf,
name: String,
#[arg(long, default_value = "true")]
schemaless: bool,
},
#[command(name = "create-metadata")]
CreateMetadata {
path: PathBuf,
name: String,
},
Delete {
path: PathBuf,
name: String,
#[arg(long)]
force: bool,
},
List {
path: PathBuf,
#[arg(short, long, default_value = "table")]
format: String,
},
Show {
path: PathBuf,
collection: String,
#[arg(short, long, default_value = "0")]
samples: usize,
#[arg(short, long, default_value = "table")]
format: String,
},
Analyze {
path: PathBuf,
collection: String,
#[arg(short, long, default_value = "table")]
format: String,
},
}
#[derive(Subcommand)]
pub enum DataCommands {
Import {
file: PathBuf,
#[arg(short, long, default_value = "./data")]
database: PathBuf,
#[arg(short, long)]
collection: String,
#[arg(long)]
dimension: Option<usize>,
#[arg(long, value_enum, default_value = "cosine")]
metric: MetricArg,
#[arg(long, value_enum, default_value = "full")]
storage_mode: StorageModeArg,
#[arg(long, default_value = "id")]
id_column: String,
#[arg(long, default_value = "vector")]
vector_column: String,
#[arg(long, default_value = "1000")]
batch_size: usize,
#[arg(long, default_value = "true")]
progress: bool,
},
Export {
path: PathBuf,
collection: String,
#[arg(short, long)]
output: Option<PathBuf>,
#[arg(long, default_value = "true")]
include_vectors: bool,
},
Upsert {
path: PathBuf,
collection: String,
#[arg(long)]
id: u64,
#[arg(long)]
vector: Option<String>,
#[arg(long)]
payload: Option<String>,
},
Get {
path: PathBuf,
collection: String,
id: u64,
#[arg(short, long, default_value = "json")]
format: String,
},
#[command(name = "delete")]
DeletePoints {
path: PathBuf,
collection: String,
#[arg(required = true)]
ids: Vec<u64>,
},
}
#[derive(Subcommand)]
pub enum QueryCommands {
#[command(name = "execute")]
Execute {
path: PathBuf,
query: String,
#[arg(short, long, default_value = "table")]
format: String,
},
#[command(name = "search")]
Search {
path: PathBuf,
collection: String,
vectors: String,
#[arg(short = 'k', long, default_value = "10")]
top_k: usize,
#[arg(short, long, default_value = "rrf")]
strategy: String,
#[arg(long, default_value = "60")]
rrf_k: u32,
#[arg(short, long, default_value = "table")]
format: String,
},
Explain {
path: PathBuf,
query: String,
#[arg(short, long, default_value = "tree")]
format: String,
},
}
#[derive(Subcommand)]
pub enum SimdAction {
Info,
Benchmark,
}
#[derive(Subcommand)]
pub enum IndexAction {
Create {
path: PathBuf,
collection: String,
field: String,
#[arg(long, value_enum, default_value = "secondary")]
index_type: IndexTypeArg,
#[arg(long)]
label: Option<String>,
},
Drop {
path: PathBuf,
collection: String,
label: String,
property: String,
},
List {
path: PathBuf,
collection: String,
#[arg(short, long, default_value = "table")]
format: String,
},
}
#[derive(Subcommand)]
pub enum LicenseAction {
Show,
Activate {
key: String,
},
Verify {
key: String,
#[arg(short, long)]
public_key: String,
},
}