use clap::{Parser, Subcommand};
#[derive(Parser)]
#[command(
name = "meshlet",
about = "Personal bookmark manager with CRDT sync",
version
)]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
}
#[derive(Subcommand)]
pub enum Commands {
Add {
url: Option<String>,
#[arg(long, short)]
title: Option<String>,
#[arg(long)]
tag: Option<String>,
#[arg(long)]
desc: Option<String>,
#[arg(long)]
no_fetch: bool,
#[arg(long)]
immutable: bool,
},
List {
#[arg(long)]
tag: Option<String>,
#[arg(long)]
json: bool,
},
Search {
keywords: Vec<String>,
#[arg(long)]
deep: bool,
#[arg(long)]
regex: bool,
#[arg(long)]
all: bool,
#[arg(long)]
tag: Option<String>,
#[arg(long)]
json: bool,
},
Delete {
indices: Vec<usize>,
#[arg(long, num_args = 2)]
range: Option<Vec<usize>>,
},
Edit {
index: usize,
#[arg(long)]
url: Option<String>,
#[arg(long)]
title: Option<String>,
#[arg(long)]
tag: Option<String>,
#[arg(long)]
tag_add: Option<String>,
#[arg(long)]
tag_delete: Option<String>,
#[arg(long)]
desc: Option<String>,
#[arg(long)]
immutable: Option<bool>,
},
Tag {
index: usize,
tags: Vec<String>,
#[arg(long, short)]
delete: bool,
},
Open {
index: usize,
},
Import {
file: String,
},
Export {
file: String,
#[arg(long, default_value = "md")]
format: String,
},
Sync {
#[arg(long)]
server: Option<String>,
#[arg(long)]
token: Option<String>,
#[arg(long)]
status: bool,
},
Gc,
Config {
#[arg(long)]
server: Option<String>,
#[arg(long)]
token: Option<String>,
#[arg(long)]
data_dir: Option<String>,
},
}