use clap::{Parser, Subcommand};
#[derive(Parser)]
#[command(name = "naru")]
#[command(about = "A simple config manager CLI", long_about = None)]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
}
#[derive(Subcommand)]
pub enum Commands {
Init,
Set {
kv: String,
#[arg(short, long, default_value = "development")]
env: String,
#[arg(short, long)]
secret: bool,
},
Get {
key: String,
#[arg(short, long, default_value = "development")]
env: String,
},
List {
#[arg(short, long, default_value = "development")]
env: String,
},
Import {
file_path: String,
#[arg(short, long, default_value = "development")]
env: String,
},
Export {
file_path: String,
#[arg(short, long, default_value = "development")]
env: String,
#[arg(long, default_value = "env")]
format: String,
},
Schema {
#[command(subcommand)]
action: SchemaAction,
},
Env {
#[command(subcommand)]
action: EnvAction,
},
Backup {
#[command(subcommand)]
action: BackupAction,
},
Diff {
env1: String,
env2: String,
},
Convert {
from_file: String,
to_file: String,
#[arg(long, default_value = "json")]
from_format: String,
#[arg(long, default_value = "json")]
to_format: String,
},
Crypto {
#[command(subcommand)]
action: CryptoAction,
},
Audit {
#[command(subcommand)]
action: AuditAction,
},
Validate,
Batch {
#[command(subcommand)]
action: BatchAction,
},
Template {
#[command(subcommand)]
action: TemplateAction,
},
Search {
query: String,
#[arg(short, long)]
env: Option<String>,
#[arg(short, long)]
values: bool,
},
Doctor,
Stats,
Version,
}
#[derive(Subcommand)]
pub enum AuditAction {
Log {
#[arg(long, default_value = "10")]
count: usize,
},
Verify,
}
#[derive(Subcommand)]
pub enum CryptoAction {
Encrypt {
input_file: String,
output_file: String,
},
Decrypt {
input_file: String,
output_file: String,
},
}
#[derive(Subcommand)]
pub enum BackupAction {
Create {
file_path: String,
},
Restore {
file_path: String,
},
}
#[derive(Subcommand)]
pub enum EnvAction {
Add {
name: String,
},
Remove {
name: String,
},
SetParent {
name: String,
parent: String,
},
List,
}
#[derive(Subcommand)]
pub enum SchemaAction {
Add {
key: Option<String>,
#[arg(long, default_value = "string")]
r#type: String,
#[arg(long)]
description: Option<String>,
#[arg(short, long)]
secret: bool,
},
Remove {
key: Option<String>,
},
View,
Edit {
key: Option<String>,
},
}
#[derive(Subcommand)]
pub enum BatchAction {
Set {
file: String,
#[arg(short, long, default_value = "development")]
env: String,
},
Get {
keys: Vec<String>,
#[arg(short, long, default_value = "development")]
env: String,
},
All {
#[arg(short, long, default_value = "development")]
env: String,
},
}
#[derive(Subcommand)]
pub enum TemplateAction {
Create {
name: String,
#[arg(long)]
include_secrets: bool,
},
Apply {
name: String,
#[arg(short, long, default_value = "development")]
env: String,
},
List,
}